GNU/Linux >> Belajar Linux >  >> Ubuntu

Perintah Untuk Membuat Direktori Target Bernomor Berurutan Dan Memindahkan File Batch?

Saya membuat video timelapse dengan membagi video menjadi gambar individual, menggunakan G'MIC melalui baris perintah untuk rata-rata setiap 7 frame, lalu menampilkan hasilnya ke gambar baru yang akan menghasilkan frame untuk timelapse (dengan cara ini saya mendapatkan video bebas noise yang tampak hebat). Seperti yang dapat Anda bayangkan, saya memiliki banyak bingkai – beberapa ribu gambar individu dalam direktori, dinamai secara berurutan (image1.tiff, image2.tiff, dll. ). Saya menemukan skrip yang berfungsi sempurna untuk memindahkan file – sekali…

k=1; find source/ -type f | while read file; do
     [[ k++ -le 7 ]] && mv "$file" target/ 
done 

Yang saya butuhkan sekarang adalah membuat skrip ini

  1. ulangi sampai semua file dipindahkan dan
  2. membuat direktori target bernomor urut (1, 2, 3, dll.) sehingga saya mendapatkan beberapa ratus direktori masing-masing dengan 7 gambar di dalamnya.

Untuk memperjelas, direktori 1 harus berisi gambar 1-7, direktori 2 harus berisi gambar 8-14, dll.

Bantuan apa pun sangat dihargai, saya cukup terjebak dengan yang ini.

Jawaban yang Diterima:

Skrip (python) di bawah ini membuat sub folder dan mengatur file Anda ke dalam folder:

Selain itu:

  • Skrip menghitung jumlah folder dan menambahkan nol di depan nama folder untuk penyortiran yang tepat (karena Anda menyebutkan ribuan file, artinya ratusan folder)
  • Jumlah file per folder dapat bervariasi, tergantung pada pengaturan Anda di kepala skrip

Script mengasumsikan:

  • Semua file memiliki ekstensi, semua file memiliki sama ekstensi
  • File Anda diberi nama image1.tiff , image2.tiff dll (tidak ada nol di depan).

Skrip

#!/usr/bin/env python3
import os
import math
import shutil
#---
directory = "/path/to/files"      # path to your files
n_perfolder = 7                   # number of files per sub folder
#--
# creating file list, extension
f_list = os.listdir(directory); ext = f_list[0].split(".")[-1]
# calculate number of folders
n_folders = math.ceil(len(f_list)/n_perfolder)
# creating folder names, including leading zeros
folders = [str(fn+1) for fn in range(n_folders)]
fl_names = [(len(max(folders, key=len))-len(fl))*"0"+fl for fl in folders]
# creating folders and allocate files 
for i in range(len(fl_names)):
    mkfolder = directory+"/"+fl_names[i]
    if not os.path.exists(mkfolder):
        os.makedirs(mkfolder)
        r = range(i*n_perfolder+1, i*n_perfolder+n_perfolder+1)
        for n in r:
            try:
                file = directory+"/"+"image"+str(n)+"."+ext
                target = mkfolder+"/"+"image"+str(n)+"."+ext
                shutil.copyfile(file, target)
            except FileNotFoundError:
                pass

Cara menggunakan

Salin skrip ke file kosong, di bagian kepala, atur direktori ke file Anda dan jumlah file per sub direktori, simpan sebagai organize.py .

Jalankan dengan perintah:

python3 /path/to/organize.py

Catatan

Jika Anda ingin bergerak file alih-alih menyalin, ganti baris:

shutil.copyfile(file, target)

oleh:

shutil.move(file, target)

(ingat indentnya!)

Terkait:Bagaimana cara mengatur warna/pola latar belakang di jendela Nautilus?
Ubuntu
  1. Batch mengganti nama file di baris perintah dan Xargs

  2. Pindahkan berbagai file bernomor?

  3. Cara memindahkan semua file dan folder melalui perintah mv

  1. Temukan file dan direktori di Linux dengan perintah find

  2. Buat dan hapus pengguna di Ubuntu 20.04

  3. Bagaimana cara memindahkan file dan direktori ke folder induk di Linux?

  1. Cara Menyalin File dan Direktori di Linux

  2. Cara Menghapus Direktori dan File Menggunakan Linux

  3. Temukan Perintah di Linux (Temukan File dan Direktori)