我有一个包含几十个文件的目录。我想对此目录中的每个第二个文件执行某些操作。到现在为止我只使用了find
命令,但是我处理了所有文件:
find ./dir/ -type f -exec cat {} \;
答案 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
复制了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