我想得到find输出的最后两行,并将它们复制到某个地方。我试过
find . -iname "*FooBar*" | tail -2 -exec cp "{}" dest ;
但是tail的输出是"无效选项--2"。
此外,我的文件或目录名包含空格。
以下内容应该适用于任何路径。
声明一个函数,使其能够在NUL分离输出上使用head
和tail
:
nul_terminated() {
tr ' n' 'n ' | "$@" | tr ' n' 'n '
}
然后,您可以使用它在通过tail
:后从搜索中获得一个NUL分隔的路径列表
find . -exec printf '%s ' {} ; | nul_terminated tail -n 2
然后,您可以通过管道将其发送到xargs
并添加您的选项:
find . -iname "*FooBar*" -exec printf '%s ' {} ; | nul_terminated tail -n 2 | xargs -I "{}" -0 cp "{}" "dest"
说明:
- 当前目录(
.
)及以下的find
文件,名称包含foobar
(由于-iname
中的i
,不区分大小写) - 对于每个文件,运行(
-exec
)一个命令 - 单独打印每个文件路径(
{}
),后跟NUL字符(