2013-05-08 67 views
2

我在我的很多的一个子目录中运行以下命令:运行在多个目录中的命令

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位包括文件名的完整路径,它一直没有工作。

我相信这是快速修复,但您的帮助和意见将不胜感激。我想从父目录运行此命令。谢谢!

回答

1

一些丑陋的方式:因为通配发生之前,即使找到执行

find . -name inputs.in | xargs dirname |      \ 
    xargs -I{} -n 1 find {} -name '*.rst' | xargs ls -C1 -t | \ 
    awk 'NR>1' | xargs rm 

LS通配符会失败。

0

如果您已经安装GNU并行:

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)。你的命令行 会爱你。