Soluzione 1:
Per evitare un uso inutile di cat
(e se non usi rsync
):
xargs -a file_list.txt mv -t /path/to/dest
Questo gestirà qualsiasi nome di file valido, a meno che non contenga una nuova riga, se i file sono elencati uno per riga.
Soluzione 2:
rsync ha diverse opzioni che possono richiedere un elenco di file da elaborare (--files-from
, --include-from
, ecc.).
Ad esempio, questo funzionerà:
rsync -a /source/directory --files-from=/full/path/to/listfile /destination/directory
Soluzione 3:
for file in `cat listoffiles`; do mv "$file" /path/of/destination ; done
assumendo bash, più listoffiles
contenente un file per riga. La mia unica obiezione alla rotta rsync è che l'OP richiede un metodo per spostare i file, non per copiarli. rsync ha più bandiere di un matrimonio reale, quindi sono sicuro che può essere ulteriormente modificato per farlo, ma a volte più semplice è meglio!
Soluzione 4:
rsync --files-from=file_list.txt /path/to/source/ /path/to/dest/
Rsync ha l'ulteriore vantaggio rispetto a cp
o mv
comandi perché creerà automaticamente le cartelle se non esistono.
Soluzione 5:
Questo dipende dal formato del file di testo che hai. Ad esempio, se l'elenco dei file è scritto in modo tale che Ogni file si trovi su una nuova riga. Puoi usare xargs come:
$ cat your_text_file | xargs cp -t /path/to/destination
Inoltre, puoi usare find
comando con -exec
opzione. per copiare/spostare i file.