Bash
如何將文本文件中指定的文件移動到 BASH 上的另一個目錄?
我有一個包含 400 多個圖像的目錄。他們中的大多數是腐敗的。我確定了好的。它們列在一個文本文件中(其中有 100 多個)。如何一次將它們全部移動到 BASH 上的另一個目錄?
有幾種方法可以立即想到:
- 使用 while 循環
- 使用 xargs
- 使用 rsync
假設列出了文件名(每行一個)
files.txt
,我們希望將它們從子目錄移動source/
到子目錄target
。while 循環可能看起來像這樣:
while read filename; do mv source/${filename} target/; done < files.txt
xargs 命令可能如下所示:
cat files.txt | xargs -n 1 -d'\n' -I {} mv source/{} target/
rsync 命令可能看起來像這樣:
rsync -av --remove-source-files --files-from=files.txt source/ target/
創建一個沙箱來試驗和測試每種方法可能是值得的,例如:
# 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/