我在我的许多子目录中运行此命令:
ls *.rst -C1 -t | awk 'NR>1' | xargs rm
基本上,这会列出以.rst结尾的所有文件,然后根据它们创建的时间对它们进行排序,我只想要最近创建的文件。然后我删除了剩余的* .rst文件。
我有200个目录需要执行此命令。我尝试使用find命令将目录的位置传递给此命令,但我没有成功。所有这些目录都包含inputs.in文件。我试过了:
find . -name inputs.in | xargs ls *.rst -C1 -t | awk 'NR>1' | xargs rm
但我相信,因为ls * .rst位的输入是包含文件名的完整路径,所以它一直没有工作。
我确信这是快速修复,但我们非常感谢您的帮助和评论。我想从父目录运行此命令。谢谢!
答案 0 :(得分:1)
有些丑陋的方式:
find . -name inputs.in | xargs dirname | \
xargs -I{} -n 1 find {} -name '*.rst' | xargs ls -C1 -t | \
awk 'NR>1' | xargs rm
带有通配符的ls会失败,因为在执行find之前会发生globbing。
答案 1 :(得分:0)
如果你安装了GNU Parallel:
find . -name inputs.in | parallel "cd {//} && ls *.rst -C1 -t | awk 'NR>1' | xargs rm"
如果没有为您的系统打包,则应在10秒内安装:
(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash
要了解更多信息:观看介绍视频,以便快速了解: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1
完成教程(man parallel_tutorial)。你命令行 会爱你的。