使用的Unix命令
wc -l * | grep -v "14" | rm -rf
然而,这种分组似乎没有完成这项工作。任何人都能指出我正确的方法吗? 感谢
答案 0 :(得分:2)
wc -l * 2>&1 | while read -r num file; do ((num > 14)) && echo rm "$file"; done
删除" echo"如果您对结果感到满意。
答案 1 :(得分:1)
这是打印出至少包含15行的所有文件名称的一种方法(假设你有nextfile
命令的Gnu awk:
awk 'FNR==15{print FILENAME;nextfile}' *
这会对任何子目录产生错误,因此它并不理想。
但是,您实际上并不想打印文件名。你想删除它们。您可以使用awk
函数在system
中执行此操作:
# The following has been defanged in case someone decides to copy&paste
awk 'FNR==15{system("echo rm "FILENAME);nextfile}' *
答案 2 :(得分:1)
for f in *; do if [ $(wc -l $f | cut -d' ' -f1) -gt 14 ]; then rm -f $f; fi; done
答案 3 :(得分:0)
您的解决方案存在一些问题:rm
没有从标准输入中获取输入,而您的grep
只能查找不具备的文件 14行。试试这个:
find . -type f -maxdepth 1 | while read f; do [ `wc -l $f | tr -s ' ' | cut -d ' ' -f 2` -gt 14 ] && rm $f; done
以下是它的工作原理:
find . -type f -maxdepth 1 #all files (not directories) in the current directory
[ #start comparison
wc -l $f #get line count of file
tr -s ' ' #(on the output of wc) eliminate extra whitespace
cut -d ' ' -f 2 #pick just the line count out of the previous output
-gt 14 ] #test if all that was greater than 14
&& rm $f #if the comparison was true, delete the file
我试图找出一个只使用find
和-exec
的解决方案,但我无法找到测试行数的方法。也许其他人可以想出办法