Bash

如何將文本文件中指定的文件移動到 BASH 上的另一個目錄?

  • November 6, 2017

我有一個包含 400 多個圖像的目錄。他們中的大多數是腐敗的。我確定了好的。它們列在一個文本文件中(其中有 100 多個)。如何一次將它們全部移動到 BASH 上的另一個目錄?

有幾種方法可以立即想到:

  1. 使用 while 循環
  2. 使用 xargs
  3. 使用 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/

引用自:https://unix.stackexchange.com/questions/402728