如何在bash中处理每一个文件?

时间:2010-12-29 11:39:58

标签: bash scripting find

我有一个包含几十个文件的目录。我想对此目录中的每个第二个文件执行某些操作。到现在为止我只使用了find命令,但是我处理了所有文件:

find ./dir/ -type f -exec cat {} \;

4 个答案:

答案 0 :(得分:15)

for file in `find dir -type f | awk 'NR % 2 == 0'`; do
  echo $file
done

NR是当前的行号。要获得奇数行,请使用... == 1

答案 1 :(得分:6)

cnt=0; 
for file in $(find ./dir -type f); <-- if not too many matches
do 
  let cnt=cnt+1; 
  if [ $cnt -eq 2 ]; 
    then echo $file;               <-- do something
    cnt=0;                         <-- alternate file
  fi; 
done

second_file=$(find -type f | head -2 | tail -1);

答案 2 :(得分:0)

如果您想在每个备用文件上运行my_cmd,这可能会有所帮助

 find ./dir -type f | sort -n | sed -n '1~2!p'  | sed 's/^/mycmd  /' | sh

我从How to remove every other line with sed?

复制了sed

答案 3 :(得分:0)

我有两次文件,需要删除每一个文件。找到我刚回来的随机文件,因此我添加了一个排序。它现在看起来像这样:

#!/bin/bash
DIRNAME="<directoryNameContainingYourFiles>"
for file in `find $DIRNAME -type f | sort | awk 'NR % 2 == 0'`; do
  echo "going to modify" $file
  #  ls -laFh $file           # show file details
  #  rm $file                 # delete file
  #  mv $file <newDirName>    # move file to <newDirName>
done

将其放在名为 scriptName 的文件中,运行

chmod +x scriptName

并通过调用

启动它
./scriptName