Jawaban:
find /path/to -regex ".*\.\(jpg\|gif\|png\|jpeg\)" > log
find /path/to/ \( -iname '*.gif' -o -iname '*.jpg' \) -print0
akan bekerja. Mungkin ada cara yang lebih elegan.
find /path/to/ \( -iname '*.gif' -o -iname '*.jpg' \) -exec ls -l {} \;
jika eksekutif hanya berlaku untuk bagian terakhir ( -iname '*.jpg'
dalam hal ini).
find /path/to/ -iname '*.gif' -o -iname '*.jpg' -print0
hanya akan mencetak file jpg! Anda membutuhkan tanda kurung di sini:find /path/to/ \( -iname '*.gif' -o -iname '*.jpg' \) -print0
find -E /path/to -regex ".*\.(jpg|gif|png|jpeg)" > log
The -E
menyelamatkan Anda dari keharusan untuk melarikan diri parens dan pipa di regex Anda.
-E
opsi memberitahu find
untuk menggunakan "ekspresi reguler yang diperluas". Beberapa alat lain memiliki opsi serupa, tetapi saya tidak yakin opsi ini tersedia di semua distribusi UNIX.
find . -regextype posix-extended -regex ".*\.(jpg|gif|png|jpeg)"
.
find -E /path/to -iregex ".*\.(jpg|gif|png|jpeg)" > log
. Menggunakan -iregex
flag memberitahu find
untuk mencocokkan case dengan tidak sensitif.
find /path/to/ -type f -print0 | xargs -0 file | grep -i image
Ini menggunakan file
perintah untuk mencoba mengenali jenis file, terlepas dari nama file (atau ekstensi).
Jika /path/to
atau nama file berisi string image
, maka di atas dapat mengembalikan hit palsu. Dalam hal ini, saya sarankan
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
Semua memiliki format yang sedikit berbeda.
jika file tidak memiliki ekstensi, kita dapat mencari jenis file mime
find . -type f -exec file -i {} + | awk -F': +' '{ if ($2 ~ /audio|video|matroska|mpeg/) print $1 }'
di mana (audio | video | matroska | mpeg) adalah jenis mime regex
& jika Anda ingin menghapusnya:
find . -type f -exec file -i {} + | awk -F': +' '{ if ($2 ~ /audio|video|matroska|mpeg/) print $1 }' | while read f ; do
rm "$f"
done
atau hapus semua yang lain kecuali ekstensi itu:
find . -type f -exec file -i {} + | awk -F': +' '{ if ($2 !~ /audio|video|matroska|mpeg/) print $1 }' | while read f ; do
rm "$f"
done
perhatikan! ~ bukannya ~