我找不到有助于解决此问题的帖子:
在Mac终端上我想读取包含文件名的txt文件(example.txt),例如: 20130815 144129 865 000000 0172 0780.bmp 20130815 144221 511 000003 1068 0408.bmp ......还有100多个
我想在某个文件夹/子文件夹(example_folder)中搜索它们。每次查找后,应将文件复制到新文件夹x(new_destination)。
非常感谢您的帮助!
Chers, 沫
答案 0 :(得分:1)
您可以使用管道命令,其中包含ls
,grep
,xargs
和cp
的组合。
所以基本上你开始获取文件列表
ls
然后您使用egrep -e
,grep -e
或其grep
Mac用于其终端的任何风格来过滤它们。如果要查找以文本结尾的所有文件,可以使用正则表达式.txt$
(这意味着以“.txt”结尾)
ls | egrep -e "yourRegexExpression"
之后你会得到一个输入流,但cp
不能用于输入流,只需要一堆参数,这就是我们使用xargs将其转换为参数的原因。最后一步是将标志-t
添加到参数中,以表示下一个参数是目标目录。
ls | egrep -e "yourRegexExpression" | xargs cp -t DIRECTORY
我希望这有帮助!
修改强>
抱歉,我没有充分阅读这个问题,我更新了以匹配您的问题。在这里,您可以看到egrep
命令以这种方式编译包含所有文件名的相当大的正则表达式字符串(filename1|filename2|...|fileN)
。 $()计算内部命令并使用tr
将newLines转换为“|”为正则表达式。
ls | egrep -e "("$(cat yourtextfile.txt | tr "\n" "|")")" | xargs cp -t DIRECTORY
答案 1 :(得分:1)
您可以执行以下操作:
$ for i in `cat example.txt`
find /search/path -type f -name "$i" -exec cp "{}" /new/path \;
这就是example.txt
中每一行的工作方式:
for i in `cat example.txt`
它将尝试在定义的路径中找到与行$i
匹配的文件:
find /search/path -type f -name "$i"
如果发现它会将其复制到所需的位置:
-exec cp "{}" /new/path \;