我想限制 find 命令的输出。过去我曾经用于这个 ls 命令,例如:
ls *tgz|head -100|xargs -i mv "{}" ../
Run Code Online (Sandbox Code Playgroud)
但我知道如果文件名包含换行符,结果可能是不可预测的。所以更正确的方法是这样的:
find ... -print0 | xargs -0
Run Code Online (Sandbox Code Playgroud)
但是采用这种方法我无法使用 head 命令限制 find 的输出 - 它显示所有文件名用 ^@ 特殊符号分隔:
find . -name '*tgz' -print0|head -2|less
Run Code Online (Sandbox Code Playgroud)
file1.tgz^@file2.tgz^@file3.tgz^@file4.tgz^@file5.tgz^@
有没有办法消除这种尴尬?
我试图在 awk 的帮助下解决它:
find . -name 'BATCHED*' -print0|awk 'BEGIN{RS=""}'
Run Code Online (Sandbox Code Playgroud)
但它仍然显示所有或零行。
可以借助awk解决吗?有更好的解决方案吗?
顺便提一句。我发现这个非常有指导意义的参考,但我的问题没有答案。
安全find
的另一个机会:
while IFS= read -r -d '' -u 9
do
let ++count
if [[ count -gt 10 ]]
then
unset count
break
fi
printf "$REPLY"
printf "$\x00"
done 9< <( find /full/path -print0 )
Run Code Online (Sandbox Code Playgroud)
要验证,只需将其输入:
while IFS= read -r -d ''
do
echo "START${REPLY}END"
done
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2866 次 |
最近记录: |