私は数十のファイルを持つディレクトリを持っています。私はこのディレクトリから1つおきに何かをしたいと思います。今では私はfind
コマンドを使用しますが、これに私はすべてのファイルを処理:bashで1秒ごとにファイルを処理する方法は?
find ./dir/ -type f -exec cat {} \;
私は数十のファイルを持つディレクトリを持っています。私はこのディレクトリから1つおきに何かをしたいと思います。今では私はfind
コマンドを使用しますが、これに私はすべてのファイルを処理:bashで1秒ごとにファイルを処理する方法は?
find ./dir/ -type f -exec cat {} \;
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);
ありがとう、それは動作します。最初の例では、 'cnt = 0'を' if'の中に追加する必要があります.2番目のファイルだけでなく2番目になります。 – klew
あなたが別のファイルのそれぞれにmy_cmd実行したい場合は、これは
を助けるかもしれませんfind ./dir -type f | sort -n | sed -n '1~2!p' | sed 's/^/mycmd /' | sh
sedをコピーしました。How to remove every other line with sed?
for file in `find dir -type f | awk 'NR % 2 == 0'`; do
echo $file
done
NR
が現在の行番号です。奇数行を取得するには、... == 1
を使用します。
これはおそらく、提示されたメソッドの中で最もクリーンです。いい物。 – SaltyNuts
私はすべてのファイルを2回持っていたので、すべての2番目のファイルを削除する必要がありました。私はランダムファイルを返したので、ソートを追加しました。それは次のようになります。ファイルにこれを入れ
#!/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
を呼び出すことによって、それを起動するための名前のいずれかの特殊なパターンがあります2番目のファイルですか? – ajreal
@ajreal:これについて考えていました。すべてのファイルは似ていますが、 '_tX.XXXXXXX'で終わります.Xはいくつかの数字です。通常、それらはある範囲、例えば0.1〜2.0であり、最小値から最大値まで幾何学的に成長する。特定の数のファイルはありません。だから私は0.1から2までの10のファイル、または同じ範囲の100のファイルを持つことができます。すべての2番目のファイルに一致する単純なパターンがあるかどうかはわかりません。 – klew