我有一个带有不同文件名的 list.txt ,我想在子目录中找到所有这3600个文件名,然后复制到/ destination_folder。
我可以使用命令find / path / {file.txt}然后复制到/ destination_folder吗?
list.txt 应该具有以下文件名/行:
test_20180724004008_4270.txt.bz2
test_20180724020008_4278.txt.bz2
test_20180724034009_4288.txt.bz2
test_20180724060009_4302.txt.bz2
test_20180724061009_4303.txt.bz2
test_20180724062010_4304.txt.bz2
test_20180724063010_4305.txt.bz2
test_20180724065010_4307.txt.bz2
test_20180724070010_4308.txt.bz2
test_20180724071010_4309.txt.bz2
test_20180724072010_4310.txt.bz2
test_20180724072815_4311.txt.bz2
test_20180724073507_4312.txt.bz2
test_20180724074608_4314.txt.bz2
test_20180724075041_4315.txt.bz2
test_20180724075450_4316.txt.bz2
test_20180724075843_4317.txt.bz2
test_20180724075843_4317.txt.bz2
test_20180724080207_4318.txt.bz2
test_20180724080522_4319.txt.bz2
test_20180724080826_4320.txt.bz2
test_20180724081121_4321.txt.bz2
................................
答案 0 :(得分:0)
您可能需要列出目录中所有文件的列表,然后使用列表来遍历找到的文件列表。
首先将找到的文件列表保存到文件中
find . -type f > foundFiles.txt
然后您需要使用文件搜索其他
cat list.txt | while read line
do
if [ `grep -c "${line}" foundFiles.txt` ]
then
cp -v $(grep "${line}" foundFiles.txt) /destination_folder/
fi
done
我将让您将其作为脚本并重新使用。
答案 1 :(得分:0)
您可以使用 echo 和 sed :
echo $(sed "s/.*/\"\0\"/;s/^/ -name /;s/$/ -o/;$ s/-o//" list.txt)
这将输出要在 find 命令中使用的文件的列表:
-name "file1.txt.bz2" -o -name "file2.txt.bz2" -o -name "file3.txt.bz2"
然后在查找中使用-exec cp -t targetDir {} +
复制文件:
find \( $(eval echo $(sed "s/.*/\"\0\"/;s/^/ -name /;s/$/ -o/;$ s/-o//" list.txt)) \) -exec cp -t targetDir {} +
答案 2 :(得分:0)
浏览文件并将结果附加到目标文件夹中:
for i in `cat list.txt`;
do cp `find * -name $i` destination_folder/;
done
这会找到list.txt
中的所有文件,并将这些文件复制到destination_folder/
。
for i in `cat list.txt`
创建一个变量i
,该变量遍历整个文件。
cp `find * -name $i` destination_folder/
找到文件的路径并将其复制到destination_folder/
。