比較的複雑なコマンドラインのファイル一致パターンについて、誰か助けてくれませんか?
次のようなディレクトリにファイルがあります:
1.png
1_thumb.png
1-1.png
1-1_thumb.png
1-2.png
1-2_thumb.png
2.png
2_thumb.png
2-1.png
2-1_thumb.png
3.png
3_thumb.png
3-1_thumb.png
同じファイル名のコピーがどこかに存在しないすべてのファイルをリストします-1
。したがって、上記の例では、結果は になります3.png
。
注意: ファイルとそのコピー (「-1」を含む) のファイル サイズは同じになります。
誰かこれをどうやってやるか提案してくれませんか?
答え1
-n
のすべてのファイルがコピーであり、サムネイルも必要ないと仮定すると、これは KornShell (ksh) で機能し、extglob
オプションを設定した Bash でも機能します ( shopt -s extglob
)。
for f in !(*_thumb.png|*-[1-9].png); do
g=${f%.png}-1.png
test -f $g || echo $f
done
答え2
コピーであると判断されるのが「-1」だけの場合、2-1.pngまたは2-1_thumb.pngファイルのコピーはありません。これが一致基準であり、サムネイルもテストしたい場合は、次のようにします。
for i in `ls |grep -v "\-1" | cut -f1 -d.`; do
if `echo $i | grep thumb > /dev/null`; then
test -f `echo $i.png | sed 's/_/-1_/g'` || echo $i.png;
else
test -f $i-1.png || echo $i.png;
fi;
done
そうでなければ、親指がカウントされない場合は、KAKの回答が適しているはずです