我想编写一个查找文件列表的脚本,并将它们复制到另一个目录:
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
有什么想法吗?
答案 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)
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