用于查找和复制文件的脚本

时间:2015-02-27 21:39:43

标签: linux bash

我想编写一个查找文件列表的脚本,并将它们复制到另一个目录:

for file in `cat ~/fileNames.txt`; do cp $(find $PWD -name $file) $TARGET_DIR; done

打印出$file按预期工作但找不到我用于调试的以下脚本中的任何输出:

for file in `cat ~/fileNames.txt`; do echo $file; echo $(find $PWD -name $file); done

我知道这些文件位于$ PWD

下面的一个子目录中

更新

使用-exec选项仅复制列表中的最后一个文件。

for file in `cat ~/fileNames.txt`; do find $PWD -name "$file" -exec cp -f {} $TARGET_DIR \;; done

使用while循环似乎没有做任何不同的事情:

cat ~/fileNames.txt | while read file; do echo $file; find $PWD -name "$file" -exec cp -f {} $TARGET_DIR \;; done

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

试试这个脚本:

while read -r file; do
   find . -name "$file"
done < ~/fileNames.txt

复制文件:

while read -r file; do
   find . -name "$file" -exec cp {} "$TARGET_DIR" \;
done < ~/fileNames.txt

答案 1 :(得分:0)

Never do this

for file in `cat ~/fileNames.txt`; do

它受到单词拆分和路径名扩展的影响。相反,您需要使用while循环读取文件:

while IFS= read -r file; do
    # stuff
done < ~/fileNames.txt

然后,您可以将find-exec操作一起使用:

find . -name "$file" -exec cp {} "$target_dir" \;

最后:

while IFS= read -r file; do
    find . -name "$file" -exec cp {} "$target_dir" \;
done < ~/fileNames.txt