我有一个场景,我需要选择所有具有aliencoders.numeric-digits的文件 像alienoders.1206 和find命令也应该搜索所有子目录。如果没有这样的文件,它就不应该做任何事情。
我写道:
find /home/jassi/ -name "aliencoders.[0-9]+" | xargs ls -lrt | awk print '$9'
如果没有这样的文件以aliencoders.xx开始...... ,它会说没有这样的文件或目录
如何通过传递此错误。我必须为几个这样的目录运行它,它应该为这些目录提供输出,只有这样的文件模式存在,否则没有警告,也不做xargs等东西。
目前,如果没有这样的文件,则它将当前目录t find而不是/ home / jassi
答案 0 :(得分:2)
如果您不想在输入为空时执行xargs
,则可以使用-r
或--no-run-if-empty
,这些是man页面中指出的GNU扩展名。所以,如果你有这种支持,你可以试试
find /home/jassi/ -name "aliencoders.[0-9]+" | xargs -r ls -lrt | awk '{print $9}'
或者,您可以使用exec
选项和find
来实现这些内容
find /home/jassi/ -name "aliencoders.[0-9]+" -exec ls -lrt {} + | awk '{print $9}'
希望这有帮助!
答案 1 :(得分:1)
<强>的bash 强>:
尝试此命令(在bash
shell下,因为大多数人都使用它,并且没有指定shell):
find /home/jassi/ -name "aliencoders.[0-9]+" 2>&1 | xargs ls -lrt | awk '{print $9}'
使用2>&1
,您将错误消息从stderr
重定向到stdout
。获得此单个输出流后,您可以使用管道等处理它。
如果没有此重定向,您向stderr
的错误消息将继续转到控制台,在输出中创建混乱,并且管道仅处理stdout
。
All about redirection会为您提供有关重定向的更多详细信息和控制权。
<强>更新强>:
<强> tcsh的强>:
基于tcsh
的使用(有时我认为我是唯一使用它的人),可以使用以下构造将stderr
重定向到stdout
:
command |& ...
所以
find /home/jassi/ -name "aliencoders.[0-9]+" |& xargs ls -lrt | awk '{print $9}'
应该有所帮助。在您的错误消息绕过管道并直接进入控制台之前,管道只处理stdout
。有了这个所有输出通过管道,你可以过滤掉你想要的。
另外,请注意在命令末尾使用awk
命令:
awk '{print $9}'
与您最初发布的内容不同。