给定文件名列表(没有路径),找到多个子目录中的文件并将这些文件复制到目标文件夹

时间:2018-02-28 00:45:21

标签: bash shell rsync

我需要一种方法来将.txt或.csv文件名列表作为源,搜索目录,在该目录下有多个子目录(虽然不超过2-3个级别),并将找到的文件复制到目标文件夹。我没有成功:

for file in `cat ~/Desktop/filelist.txt`; do cp "$file" ~/Desktop; done

...而rsync也让我失望了。我知道这里有很多类似的问题,但是我找不到适合我的解决方案。

1 个答案:

答案 0 :(得分:1)

如果您必须搜索,您可能希望在某个时候使用find。这是一个粗略的草图:

IFS=$'\n'
for fileName in $(cat ~/Desktop/filelist.txt)
do
  find \
    /full/path/to/directory/to/search \
    -maxdepth 3 \
    -name "$fileName" \
    -exec mv {} /full/path/to/destinationDirectory/ \;
done

IFS=$'\n'部分和所有双引号都在那里,以便当列表中的某些文件的名称中包含空格时,脚本可以正常工作。反斜杠用于忽略换行符(它是循环中的一个长find命令)。