例如,一个目录可以包含文件。
12_foo9.dat
34foo32.txt
24foobar.png
997_bar.txt
我希望将文件名中包含“foo”的文件复制到另一个目录中,使该目录包含前三个文件但不包含第四个。
我已经搜索过,但还没有找到这样做的方法。该目录有大量文件,但只有1%左右需要复制。
谢谢
$ mkdir NEWDIR
$ touch foo_file file_foo file_foo_file
$ ls
NEWDIR file_foo file_foo_file foo_file
$ cp -v *foo NEWDIR/
file_foo -> NEWDIR/file_foo
$ cp -v foo* NEWDIR/
foo_file -> NEWDIR/foo_file
$ cp -v *foo* NEWDIR/
file_foo -> NEWDIR/file_foo
file_foo_file -> NEWDIR/file_foo_file
foo_file -> NEWDIR/foo_file
$ ls NEWDIR/
file_foo file_foo_file foo_file
尝试这个语句:cp *foo* /newdir
find . -type f -depth 1 -name "*foo*" -exec cp {} /otherdir \; -print
这里没有使用shell扩展,所以您不会尝试使用数百万个参数运行命令。 -print
提供了一些进度指示,但可以省略。要简单地列出要复制的文件:
find . -type f -depth 1 -name "*foo*"
cp *foo* /path/to/separate_directory
如果您想要先验证将要被包含的文件,则使用:
ls *foo*
这将确认要匹配的文件,然后您可以使用相同的模式和cp命令来执行复制。
shopt -s failglob
echo cp *foo* /path/to/separate
这将输出复制命令(或者失败并显示 bash: no match: *foo*
)。
在确认输出后,移除 echo
命令以实际执行 复制 目录条目。