Bash脚本对目录中的所有文件执行命令
有人可以提供代码来执行以下操作:假设有一个文件目录,所有这些都需要通过程序运行。 程序将结果输出到标准输出。 我需要一个将进入目录的脚本,对每个文件执行命令,并将输出连接成一个大的输出文件。
例如,要在一个文件上运行命令:
$ cmd [option] [filename] > results.out 
	
下面的bash代码将传递$ file到命令,其中$ file将代表/ dir中的每个文件
 for file in /dir/* do cmd [option] "$file" >> results.out done 
例
 el@defiant ~/foo $ touch foo.txt bar.txt baz.txt el@defiant ~/foo $ for i in *.txt; do echo "hello $i"; done hello bar.txt hello baz.txt hello foo.txt 
这个怎么样:
 find /some/directory -maxdepth 1 -type f -exec cmd option {} \; > results.out 
-   
-maxdepth 1参数防止发现recursion-maxdepth 1任何子目录。 (如果你想要这样的嵌套目录得到处理,你可以省略这个) -   
-type -f指定只处理纯文件。 -   
-exec cmd option {}告诉它为每个find的文件使用指定的option运行cmd,文件名被replace为{} -  
\;表示命令的结束。 -  最后,所有单独的
cmd执行的输出被redirect到results.out 
 但是,如果你关心处理文件的顺序,你最好写一个循环。 我认为find处理inode顺序的文件(虽然我可能是错误的),这可能不是你想要的。 
我正在通过命令行在我的覆盆子pi上执行以下操作:
 for i in *;do omxplayer "$i";done 
基于@Jim Lewis的方法:
 这是一个快速的解决scheme,使用find和sorting文件的修改date: 
 $ find directory/ -maxdepth 1 -type f -print0 | \ xargs -r0 stat -c "%y %n" | \ sort | cut -d' ' -f4- | \ xargs -d "\n" -I{} cmd -op1 {} 
有关分类,请参阅
http://www.commandlinefu.com/commands/view/5720/find-files-and-list-them-sorted-by-modification-time
我需要将所有.md文件从一个目录复制到另一个目录,所以这就是我所做的。
 for i in **/*.md;do mkdir -p ../docs/"$i" && rm -r ../docs/"$i" && cp "$i" "../docs/$i" && echo "$i -> ../docs/$i"; done 
这是非常难以阅读,所以让我们分解。
首先用你的文件cd进入目录,
 for i in **/*.md; 为您的模式中的每个文件 
  mkdir -p ../docs/"$i"在包含文件的文件夹之外的文档文件夹中创build该目录。 这将创build一个与该文件具有相同名称的额外文件夹。 
  rm -r ../docs/"$i"删除由于mkdir -p创build的额外文件夹 
  cp "$i" "../docs/$i"复制实际文件 
  echo "$i -> ../docs/$i"回声你做了什么 
 ; done 从此过着幸福快乐的生活