Existem várias maneiras de fazer isso que vêm imediatamente à mente:
- Usando um loop while
- Usando xargs
- Usando o rsync
Suponha que os nomes dos arquivos estejam listados (um por linha) em files.txt
e queremos movê-los do subdiretório source/
para o subdiretório target
.
O loop while pode ser algo assim:
while read filename; do mv source/${filename} target/; done < files.txt
O comando xargs pode ser parecido com isto:
cat files.txt | xargs -n 1 -d'\n' -I {} mv source/{} target/
E o comando rsync pode ser algo assim:
rsync -av --remove-source-files --files-from=files.txt source/ target/
Pode valer a pena criar um sandbox para experimentar e testar cada abordagem, por exemplo:
# Create a sandbox directory
mkdir -p /tmp/sandbox
# Create file containing the list of filenames to be moved
for filename in file{001..100}.dat; do basename ${filename}; done >> /tmp/sandbox/files.txt
# Create a source directory (to move files from)
mkdir -p /tmp/sandbox/source
# Populate the source directory (with 100 empty files)
touch /tmp/sandbox/source/file{001..100}.dat
# Create a target directory (to move files to)
mkdir -p /tmp/sandbox/target
# Move the files from the source directory to the target directory
rsync -av --remove-source-files --files-from=/tmp/sandbox/files.txt /tmp/sandbox/source/ /tmp/sandbox/target/