【问题标题】:Given a list of filenames (without paths), find the files within multiple subdirectories and copy those files to a destination folder给定文件名列表(没有路径),在多个子目录中找到文件并将这些文件复制到目标文件夹
【发布时间】:2018-02-28 00:45:21
【问题描述】:

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

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

...而且 rsync 也让我失望了。我知道这里已经有多个类似的问题,但我没有找到适合我的解决方案。

【问题讨论】:

  • 您必须使用编辑器标记代码{}-Button,否则您会遇到惊喜。看预告!

标签: bash shell rsync


【解决方案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 命令)。

【讨论】:

  • 谢谢,这很有帮助。我很尴尬地承认,我最初的几次失败尝试可能与不正确的目录路径有关。我刚刚运行它,列表中的文件数量相当长;我想这需要很多小时才能完成。有没有办法让脚本更有效率?另外,你能解释一下为什么是美元符号/括号,而不是 cat 和文件名周围的单引号吗?
猜你喜欢
  • 1970-01-01
  • 2021-03-21
  • 1970-01-01
  • 2014-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-03
  • 1970-01-01
相关资源
最近更新 更多