Saya perlu membuat versi TIF dan JPG dari serangkaian besar gambar.
Semua gambar JPG sudah ada, tetapi hanya sebagian dari gambar TIF. Apakah ada cara mudah untuk mencari direktori untuk menemukan semua file JPG yang tidak memiliki file TIF yang sesuai (mis. File dengan nama yang sama tetapi dengan ekstensi file yang berbeda)?
macos
shell-script
Anders Svensson
sumber
sumber
Jawaban:
Perl one-liner:
Dalam 63 karakter:
sumber
Dengan asumsi semua gambar ada di
images
direktori dan memiliki.jpg
akhiran, skrip kecil berikut akan mencetak semua file gambar yang tidak memiliki yang sesuai.tif
file di UNIX:Rekatkan ini ke file, dan simpan folder di atas yang menyimpan gambar Anda. Anda bisa menyebutnya
find-images
. Sebagai contoh:Sekarang buka Utilitas / Terminal.app , dan gunakan
cd
perintah untuk menavigasi ke folder tempat skrip Anda, mis. jika skrip ada di Desktop Anda, cukup masukkancd Desktop
.Lalu, masuk
chmod +x find-images
. Sekarang Anda dapat menjalankan skrip hanya dengan menelepon./find-images
.sumber
Saya akan menggunakan Python, karena ini adalah cross-platform. Pertama-tama, letakkan file jpg dan tif Anda di folder terpisah.
Kemudian, simpan skrip ini ke file, di suatu tempat di hard drive Anda, mungkin dengan namanya
find-images
.Sekarang buka Utilitas / Terminal.app , dan masuk
python /path/to/file
. Misalnya, jika Anda menyimpannya di Desktop, itu akan menjadipython ~/Desktop/find-images
(sejak~
adalah jalan pintas ke folder rumah Anda). Di sini, Anda bisa berlari penjelasan yang lebih rinci menjalankan file Python di Mac Anda.sumber
[item.rsplit(".", 1)[0] for item in os.listdir(jpgPath)]
...python
ke Terminal dan rekatkan pada kode di atas.Ah, saya ingin menambahkan ini. Inilah solusi di Ruby, yang mencetak setiap gambar yang tidak memiliki rekanan TIF:
Masukkan ke dalam file yang berada di folder yang sama dengan gambar Anda, simpan sebagai
find-images
, dan jalankan di Terminal dengan memasukkanruby find-images
.Jika Anda tidak tahu Ruby, jangan tanya bagaimana cara kerjanya, mungkin perlu waktu untuk menjelaskan: P
sumber
a0, a1 = ARGV[0], ARGV[1]; dir0 = Dir["*.#{a0}"]; dir1 = Dir["*.#{a1}"]; dir0.each {|f| puts f unless dir1.include?(f.sub(/\.#{a0}$/, ".#{a1}"))}
diffext
cd somedir; diffext jpg tif
sumber
Satu liner tanpa perl:
Dengan menggunakan while loop setelah ditemukan:
Dengan menggunakan (banyak) subshell:
sumber
diffexts() { find "$PWD" -name "*.$1" | while read f; do [[ ! -e ${f%.$1}.$2 ]] && echo "$f"; done; }