Yanıtlar:
find /path/to -regex ".*\.\(jpg\|gif\|png\|jpeg\)" > log
find /path/to/ \( -iname '*.gif' -o -iname '*.jpg' \) -print0
çalışacak. Daha zarif bir yol olabilir.
find /path/to/ \( -iname '*.gif' -o -iname '*.jpg' \) -exec ls -l {} \;
aksi takdirde exec yalnızca son kısım için geçerlidir ( -iname '*.jpg'
bu durumda).
find /path/to/ -iname '*.gif' -o -iname '*.jpg' -print0
sadece jpg dosyalarını basacaktır! Burada parantez gerekiyor:find /path/to/ \( -iname '*.gif' -o -iname '*.jpg' \) -print0
find -E /path/to -regex ".*\.(jpg|gif|png|jpeg)" > log
-E
Senin regex parens ve boruları kaçmaya gerek kalmaz.
-E
seçeneği find
"genişletilmiş düzenli ifadeler" kullanmayı söyler . Diğer birkaç aracın benzer bir seçeneği vardır, ancak bu seçeneğin tüm UNIX dağıtımlarında mevcut olduğundan emin değilim.
find . -regextype posix-extended -regex ".*\.(jpg|gif|png|jpeg)"
.
find -E /path/to -iregex ".*\.(jpg|gif|png|jpeg)" > log
. -iregex
Bayrağın kullanılması büyük / find
küçük harfe eşleşmemesini söyler .
find /path/to/ -type f -print0 | xargs -0 file | grep -i image
Bu file
, dosya adına (veya uzantısına) bakılmaksızın dosya türünü tanımayı denemek için komutu kullanır .
Eğer /path/to
yoksa bir dosya adı dizesi içerir image
ve ardından yukarıdaki sahte hit döndürebilir. Bu durumda,
cd /path/to
find . -type f -print0 | xargs -0 file --mime-type | grep -i image/
find /path -type f \( -iname "*.jpg" -o -name "*.jpeg" -o -iname "*gif" \)
-iname *.jpg
, -o -name *.jpeg
, -o -iname *gif
Tüm biraz farklı bir biçime sahiptir.
dosyalarda uzantı yoksa dosya mime türünü arayabiliriz
find . -type f -exec file -i {} + | awk -F': +' '{ if ($2 ~ /audio|video|matroska|mpeg/) print $1 }'
nerede (ses | video | matroska | mpeg) mime türleri normaldir
& silmek isterseniz:
find . -type f -exec file -i {} + | awk -F': +' '{ if ($2 ~ /audio|video|matroska|mpeg/) print $1 }' | while read f ; do
rm "$f"
done
veya bu uzantılar dışındaki her şeyi silin:
find . -type f -exec file -i {} + | awk -F': +' '{ if ($2 !~ /audio|video|matroska|mpeg/) print $1 }' | while read f ; do
rm "$f"
done
~ yerine! ~ dikkat edin