Cara memindahkan file dengan ekstensi file tertentu dari dalam folder induk dan juga subfoldernya ke folder baru

0

Saya ingin memindahkan semua file dengan ekstensi seperti: .JPEG .MP3 .MP4 .MOV .AVI .PDF .PSD .WAV .TXT

... ke folder induk baru dinamai ekstensi file yang terkandung di dalamnya. Saat ini saya memiliki terlalu banyak file di dalam begitu banyak subfolder (di bawah satu folder induk) untuk melakukan ini secara manual. Saya mencoba mencari folder induk dengan * untuk kemudian mengurutkan berdasarkan jenis file tetapi terlalu banyak dan sistem saya membeku atau tidak dapat digunakan / lambat. tolong anggap saya tidak tahu apa-apa mengenai skrip / file batch tetapi saya bisa mengikuti arahan, salin dan tempel;) mohon saran.

Nevermind Susan
sumber
Anda dapat menggunakan findkarena Anda telah menandai Q ini, tetapi ide yang lebih baik adalah menggunakan tar, yang memiliki sakelar untuk mendukung ini. Doa klasik adalah (di bagian atas pohon sumber) tar cf - | (cd target;tar xf -)yang menyalin seluruh pohon. Anda ingin melihat manhalaman untuk tarmelihat bagaimana memilih hanya file yang Anda inginkan.
PETA
Ups, itu salah ketik pada tarperintah, seharusnya tar cf - . | (cd target;tar xf -)(harus mengatakan itu sesuatu untuk tar.
MAP
1
OS apa yang Anda gunakan?
Jonatan Öström
Harap perhatikan bahwa Pengguna Super bukan layanan penulisan skrip. Jika Anda memberi tahu kami apa yang telah Anda coba sejauh ini (termasuk skrip yang Anda gunakan) dan di mana Anda macet, maka kami dapat mencoba membantu dengan masalah tertentu. Anda juga harus membaca Bagaimana cara saya mengajukan pertanyaan yang bagus? .
DavidPostill
Maaf Anda benar dalam hal ini saya menggunakannya sebagai layanan penulisan skrip, saya minta maaf. Jika saya tidak tahu cara menulis skrip, bagaimana saya bisa mendapatkannya atau belajar menulisnya. Bisakah saya mengajukan pertanyaan seperti, "Bisakah seseorang membantu saya menulis naskah ...?"
Nevermind Susan

Jawaban:

0

(Setelah diedit dan komentar) Script ini harus melakukannya, termasuk subfolder:

@echo off
for \r %%f in (*) do (
    if not exist %%~xf mkdir %%~xf
    move /y %%f %%~xf\%%~nf.%%~xf
)
pause

Jika Anda belum pernah menggunakan skrip Batch sebelumnya, inilah cara kerjanya:

  1. Buka Notepad ( bukan MS Word atau WordPad)
  2. Salin / rekatkan skrip di dalamnya
  3. File -> Save As
  4. Di menu tarik-turun "Jenis", pilih "Semua jenis"
  5. Simpan file sebagai something.bat(Anda dapat mengubah somethingtetapi .batperlu ada di sana)
  6. Letakkan file di direktori yang sama dengan file yang harus dikerjakan
  7. Klik dua kali file tersebut

Pastikan Anda mengujinya sebelum benar-benar menggunakannya. Pada pauseakhirnya tidak diperlukan, itu hanya akan meminta Anda untuk menekan tombol sebelum menutup jendela.

Nathan.Eilisha Shiraini
sumber
Ini hampir berfungsi karena membuat folder dengan nama ekstensi file tetapi hanya memindahkan file dengan ekstensi yang sesuai yang ada di folder yang sama dengan file .bat ke folder yang baru dibuat. Itu tidak memindahkan file yang ada di dalam subdirektori atau file di dalam folder. Saya harus menyalin dan menempel file .bat ke setiap sub folder (lebih dari 500) untuk mengurutkan semua file dengan ekstensi meninggalkan saya dengan beberapa folder JPEG .MP3 dll dalam setiap subfolder. Adakah cara untuk menjalankannya dari satu folder tempat semua 500+ folder yang berisi file berada?
Nevermind Susan
Mengedit skrip Batch, harus menyertakan subfolder. Maaf, saya tidak melihat titik itu dalam pertanyaan Anda '^^
Nathan.Eilisha Shiraini
Masih tidak termasuk konten subfolder. Mungkin itu adalah sesuatu yang saya lakukan salah. Sebelum saya pergi tidur tadi malam saya mencari di dalam folder root (asterisk periode asterisk) untuk mengekstrak semua file (280.000 file) dan setelah itu selesai menggunakan file batch yang Anda buat untuk mengurutkannya menjadi file tetapi tidak berhasil; eksekusi file batch menunjukkan 0 file yang dipindahkan aksesnya ditolak. Saya masuk sebagai admin. dan telah digunakan terbuka sebagai admin. serta saat membuka file batch. Ada ide? Terima kasih atas bantuan Anda sejauh ini.
Nevermind Susan
0

Oke, saya memperbaiki kode saya. Anda perlu melakukan dua hal. Pertama, Anda harus memiliki "directory_of_Files" yang berisi semua file dan subfolder dengan file. Selanjutnya Anda harus memiliki folder induk baru, "new_parent_directory", yang kosong. new_parent_directory akan diatur oleh akhiran file dari file dalam "directory_of_Files". Pada dasarnya, skrip ini mencari semua file di dalam direktori, dan direktori di dalam direktori itu, kemudian, membuat daftar akhir file dan kemudian membuat direktori di direktori baru berdasarkan akhiran file tersebut, dan kemudian mengambil semua file dalam direktori induk dan memindahkannya ke direktori yang baru didirikan.

Jika Anda memiliki python diinstal .....

Di terminal, ketik

python

kemudian,

import os

kemudian,

#this is ths directory that contains all your files 
#YOU MUST CHANGE THIS!!!!!!
directory_of_Files = "/Users/name/Desktop/test1"

#AND YOU MUST CHANGE THIS!!!!!!
new_parent_directory = "/Users/name/Desktop/newhometest"

#From here down, it's all magic. 
all_subfolders = [x[0] for x in os.walk(directory_of_Files)]

#Get the full file name and only the files
filenames=[]
for subfolder in all_subfolders:
    os.chdir(subfolder)
    for file in filter(os.path.isfile, os.listdir(os.getcwd())):
        if not file.startswith("."):
            filenames.append(os.getcwd()+"/"+file)

#get the file endings
all_files_endings = []
for i in filenames:
    all_files_endings.append(i.split(".",1)[1])

#remove the duplications
all_files_endings = list(set(all_files_endings))

#create some folders in the new_directory with the file endings
for fileExtensions in all_files_endings:
    os.mkdir(new_parent_directory + "/" + fileExtensions)    

#move the files from their old destination to their new destination 
newnames=[]
for subfolder in all_subfolders:
    os.chdir(subfolder)
    for file in filter(os.path.isfile, os.listdir(os.getcwd())):
        if not file.startswith("."):
            newnames.append(new_parent_directory+"/"+file.split(".",1)[1]+"/"+file)
            print file 
if len(filenames) == len(newnames):
    for i in range(len(filenames)):
        shutil.move(filenames[i], newnames[i])

Saya menguji ini pada Mac OSX 10.11 dengan python 2.7. Anda juga bisa menyalin semua kode ke file teks, menyimpannya sebagai "sesuatu.py", dan kemudian menjalankannya dari terminal dengan kode,

python something.py
dcook
sumber
"Aku tidak menguji ini," Tolong jangan posting kode yang belum diuji ...
DavidPostill
Saya tidak tahu Python dapat digunakan pada OS windows. Saya telah mengunduhnya tetapi tidak tahu bagaimana menerapkan apa yang Anda respons.
Nevermind Susan
Terima kasih David, saya tidak tahu aturannya. Ya, Susan, python hanyalah bahasa scripting lainnya. tidak ada yang spesial. Mungkin sedikit lebih baik daripada bahasa lain karena lebih mudah dibaca manusia. Skrip yang saya berikan akan PINDAHKAN, bukan mengganti nama semua file. Jika Anda hanya ingin mengganti nama, sehingga Anda memiliki cadangan asli di tempat yang lama, maka ubah baris terakhir ke os.rename alih-alih shutil.move
dcook
Cook, saya tidak menjalankan OSX atau Linux di sepanjang windows 7 di komputer ini. Saya memiliki LinuxMint / WindowsXP di desktop lain tetapi laptop ini hanya memiliki Windows7 di atasnya. Python tersedia untuk diunduh untuk windows7, saya telah mengunduh dan membuka aplikasi dan kotak cmd terbuka (saya kira setara dengan terminal) dan saya mengetikkan python dan menekan enter dan menerima: "NameError: nama 'python' tidak didefinisikan '
Nevermind Susan
apakah ada cara untuk melampirkan tangkapan layar ke komentar saya? pertama kali menggunakan superuser
Nevermind Susan