使用命令查找并复制,但使用带有名称的list.txt

时间:2018-07-30 20:50:58

标签: bash find

我有一个带有不同文件名的 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
................................

3 个答案:

答案 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/