我想得到查找输出的最后两行并将它们复制到某处.我试过了
find . -iname "*FooBar*" | tail -2 -exec cp "{}" dest \;
Run Code Online (Sandbox Code Playgroud)
但输出是尾部的"无效选项--2".
此外,我的文件或目录名称包含空格.
以下应该适用于任何路径.
声明一个能够使用head和tail在NUL分离的输出上的函数:
nul_terminated() {
tr '\0\n' '\n\0' | "$@" | tr '\0\n' '\n\0'
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用它在通过后从搜索中获取NUL分隔的路径列表tail:
find . -exec printf '%s\0' {} \; | nul_terminated tail -n 2
Run Code Online (Sandbox Code Playgroud)
然后,您可以将其传递给xargs并添加您的选项:
find . -iname "*FooBar*" -exec printf '%s\0' {} \; | nul_terminated tail -n 2 | xargs -I "{}" -0 cp "{}" "dest"
Run Code Online (Sandbox Code Playgroud)
说明:
find当前目录(.)和下面的文件,其名称包含foobar(由于iin 而不区分大小写-iname);-exec)命令{})后跟一个NUL字符(\0)单独(\;);tr '\0\n' '\n\0');"tail -n 2,"$@");tr '\0\n' '\n\0').这个xargs命令有点难以解释.它cp ... "dest"根据需要构建尽可能多的命令以适应操作系统的最大命令长度,使用{}实际文件名(-I "{}" ... "{}")替换命令中的标记,在读取参数(-0)时使用NUL字符作为分隔符.
| 归档时间: |
|
| 查看次数: |
6514 次 |
| 最近记录: |