GNU/Linux >> Belajar Linux >  >> Linux

Bash Script Untuk Mengurutkan File Ke Folder Abjad Di Readynas Duo V1?

Saya memiliki ReadyNAS Duo v1 (Sparc) lama yang menjalankan rasa Linux yang tidak diketahui.

Saya memiliki struktur folder dengan 1.000+ file yang ingin saya pindahkan ke dalam struktur folder berdasarkan huruf pertama nama file (tidak peka huruf besar/kecil).

Idealnya saya ingin struktur file terlihat seperti ini:

myfiles-+
        +-A
          + Apple.txt
          + avocado.txt
        +-B
          + Banana.txt
          + broccoli.txt
etc. etc.

Saya memiliki Google tetapi hanya menemukan alat GUI.

Bisakah ini dilakukan melalui baris perintah atau skrip?

Jawaban yang Diterima:

Inilah sedikit dari satu liner yang akan melakukan apa yang Anda inginkan:

$ mkdir -p output/{A..Z}; for i in tstdir/*; do export FILE=$(basename "$i");  LTR=$(echo" ${FILE:0:1}" | tr [a-z] [A-Z]); mv "$i" "output/$LTR/$FILE" ; done

Berikut perintah yang sama dalam bentuk yang diperluas sehingga Anda dapat melihat apa yang terjadi:

$ mkdir -p output/{A..Z}
$ for i in tstdir/*; do 
    FILE=$(basename "$i")  
    LTR=$(echo "${FILE:0:1}" | tr [a-z] [A-Z])
    mv "$i" "output/$LTR/$FILE"
  done

Detail

Yang pertama di atas mengasumsikan bahwa direktori keluaran hanya huruf tidak ada dan akan membuatnya,

$ mkdir -p output/{A..Z}

for loop bekerja sebagai berikut, mengulang semua file di tstdir/* . Kemudian menentukan basename jalur ini, dan menyimpannya dalam variabel, $FILE . Setiap iterasi melalui loop disimpan dalam variabel $i .

FILE=$(basename "$i")

Kami kemudian menggunakan kemampuan Bashes untuk mengembalikan karakter pertama dari variabel bernama, $FILE , lalu gunakan tr untuk mengonversi semua karakter huruf kecil menjadi huruf besar.

LTR=$(echo "${FILE:0:1}" | tr [a-z] [A-Z])

Menguraikan ini sedikit lagi:

$ echo "${FILE:0:1}"
s
$ echo "${FILE:0:1}"
T

Dengan tr kode Anda sekarang dapat melihat apa yang terjadi:

$ echo "${FILE:0:1}" | tr [a-z] [A-Z]
S
$ echo "${FILE:0:1}" | tr [a-z] [A-Z]
T

Perintah selanjutnya hanya memindahkan file ke direktori huruf pertama yang sesuai.

Contoh

Katakanlah kita memiliki direktori file ini:

$ touch {a-z}file {A-Z}file

$ tree tstdir/ | head -10
tstdir/
|-- afile
|-- Afile
|-- bfile
|-- Bfile
|-- cfile
|-- Cfile
|-- dfile
|-- Dfile
|-- efile
...

Setelah menjalankan satu liner:

$ tree output/ | head -10
output/
|-- A
|   |-- afile
|   `-- Afile
|-- B
|   |-- bfile
|   `-- Bfile
|-- C
|   |-- cfile
|   `-- Cfile
...

Linux
  1. Menyortir dalam bash

  2. Bagaimana cara mengurutkan file ke dalam folder berdasarkan tipe file di bash (dengan perintah 'file')?

  3. Skrip Bash untuk menghapus semua file kecuali N saat diurutkan menurut abjad

  1. Cara gzip semua file di semua sub-direktori menjadi satu file terkompresi di bash

  2. bash:masukkan file daftar ke dalam variabel dan tetapi ukuran array adalah 1

  3. Bagaimana cara memeriksa apakah ada file di direktori tertentu dalam skrip bash?

  1. Linux Bash:Pindahkan banyak file berbeda ke direktori yang sama

  2. Pencocokan pola skrip Bash

  3. Jalankan perintah bash pada pipa jenkins