Tambahkan nama folder ke nama file dan ratakan struktur file

4

Saya punya banyak folder dengan berbagai nama, misalnya

2013-02   Snow and birds
    PICT0001.jpg
    PICT0002.jpg
2013-06   Bicycle trip
    edited_panorama.jpg
    From phone
        DCIM0001.jpg
        DCIM0002.jpg
        DCIM0003.jpg
    From camera
        DSLR
            PICT0001.raw
            PICT0002.raw
        Compact
            S0000001.jpg           

Seperti yang Anda lihat, struktur umum adalah berbagai tingkat subfolder bersarang yang berisi gambar. Yang ingin saya lakukan adalah meratakan struktur, menambahkan nama setiap tingkat subfolder ke nama file, seperti ini:

2013-02   Snow and birds_PICT0001.jpg
2013-02   Snow and birds_PICT0002.jpg
2013-06   Bicycle trip_edited_panorama.jpg
2013-06   Bicycle trip_From phone_DCIM0001.jpg
2013-06   Bicycle trip_From phone_DCIM0002.jpg
2013-06   Bicycle trip_From phone_DCIM0003.jpg
2013-06   Bicycle trip_From camera_DSLR_PICT0001.raw
2013-06   Bicycle trip_From camera_DSLR_PICT0002.raw
2013-06   Bicycle trip_From camera_Compact_S0000001.jpg

Bagaimana ini bisa dicapai dengan menggunakan skrip Terminal atau jenis skrip lain? Saya telah menemukan beberapa solusi yang serupa, tetapi mereka semua tampaknya bergantung pada tingkat tetap subfolder, sedangkan struktur folder saya bervariasi.

Magnus W
sumber

Jawaban:

3

Yang rumit, terutama jika Anda ingin menyimpan semua ruang, dll. Jalankan yang berikut di direktori teratas (yang berisi 2013-02 Snow and birds dll):

find . -type f -exec sh -c 'for f do x=${f#./}; echo mv "$x" "${x////_}"; done' {} +

Tugas untuk x menyingkirkan yang terkemuka ./ dari find, itu ${x////_} menggantikan semua (sisa) kejadian / dengan _.

Juga, saya sudah melindungi yang sebenarnya mv dengan sebuah echo jadi Anda bisa memverifikasi dulu apakah perintahnya terlihat ok.

nohillside
sumber
Bekerja dengan baik! Meskipun, ia kehilangan 3 file dari 8300 untuk beberapa alasan yang tidak dapat dijelaskan. Untungnya saya memperluas semua folder dan subfolder setelah memindahkan file, hanya untuk memastikan! Ketiga file semuanya bersarang hanya sedalam 1 level dan di folder di mana sebelumnya ada file lain dengan nama yang mirip (PICT0001.JPG dll).
Magnus W
-1

Untuk keperluan skrip ini, saya memiliki semua folder Anda yang terkandung dalam folder bernama "Filez" di desktop saya. Skrip ini dimulai dengan dialog "pilih folder" untuk memilih folder yang berisi folder tempat "2013-06 Perjalanan sepeda" & amp; "2013-02 Salju dan burung" berada. Ini akan mengembalikan semua file individual di dalam semua folder dan subfolder, yang Anda inginkan namanya diubah.

set mainFolder to choose folder
set posixPathOfMainFolder to POSIX path of mainFolder
tell application "Finder"
    set theNames to files of entire contents of mainFolder as alias list
end tell
set newFileNames to {}
repeat with aFile in theNames
    set text item delimiters to {posixPathOfMainFolder, "/"}
    set aFile to POSIX path of aFile
    set tempName to text items -1 thru 2 of aFile
    set text item delimiters to "_"
    set end of newFileNames to tempName as text
    set text item delimiters to ""
    tell application "Finder"
        set the name of (aFile as POSIX file as alias) to last item of newFileNames as text
    end tell
end repeat
tell application "Finder"
    set theNames to files of entire contents of mainFolder as alias list
    move theNames to mainFolder
    delete folders of mainFolder
end tell

enter image description here

wch1zpink
sumber