GNU/Linux >> Belajar Linux >  >> Linux

Pindahkan File Dengan Membaca Nama File Mereka Ke Direktori Berbeda?

Saya perlu memindahkan file dengan membaca namanya.
Saya harus memindahkan file yang dihasilkan sistem dan namanya menyertakan cap waktu. Saya perlu memindahkan file dengan membaca nama file berdasarkan bulan.

Jika nama file mengandung 201601*.txt , lalu pindah ke 2016/January direktori. Jika nama file mengandung 201602*.txt lalu pindah ke 2016/February direktori dll.

Jawaban yang Diterima:

Nah, jika string tanggal ada di nama file dan semua file ada di direktori yang sama, Anda bisa melakukan:

mv 201601*.txt 2016/January

Melakukan ini 12 kali secara manual akan merepotkan, jadi saya akan membuat daftar dengan nomor dan nama bulan yang sesuai:

$ paste <(printf '%sn' {01..12}) <(cal 2016 | grep -Po 's+K[A-Z]w{2,}') 
01  January
02  February
03  March
04  April
05  May
06  June
07  July
08  August
09  September
10  October
11  November
12  December

Dan kemudian parsing untuk membangun mv perintah:

$ paste <(printf '%sn' {01..12}) <(cal 2016 | grep -Po 's+K[A-Z]w{2,}') | 
    while read num month; do echo mv "*2016$num*" 2016/"$month"; done
mv *201601* 2016/January
mv *201602* 2016/February
mv *201603* 2016/March
mv *201604* 2016/April
mv *201605* 2016/May
mv *201606* 2016/June
mv *201607* 2016/July
mv *201608* 2016/August
mv *201609* 2016/September
mv *201610* 2016/October
mv *201611* 2016/November
mv *201612* 2016/December

Setelah Anda yakin itu melakukan apa yang Anda butuhkan, hapus echo untuk benar-benar memindahkan file:

paste <(printf '%sn' {01..12}) <(cal 2016 | grep -Po 's+K[A-Z]w{2,}') | 
    while read num month; do echo mv "*2016$num*" 2016/"$month"; done

Penjelasan

grep -Po 's+K[A-Z]w{2,}') akan menjalankan grep dengan Ekspresi Reguler yang Kompatibel dengan Perl (-P ) dan hanya akan mencetak bagian yang cocok dari setiap baris (-o ). Ekspresi reguler yang digunakan akan mencari satu atau lebih karakter spasi putih (s+ ) diikuti dengan huruf kapital ([A-Z] ) dan 2 karakter kata atau lebih (w{2,} ). K berarti "abaikan semuanya sebelum ini" yang akan menyebabkan perintah hanya mencetak bagian dari string yang cocok setelah ruang putih. Semuanya hanya mencetak daftar bulan.


Linux
  1. Looping Melalui File Dengan Spasi Dalam Nama??

  2. Bagaimana Cara Memindahkan 100 File Dari Folder Yang Berisi Ribuan?

  3. Hapus File Dan Direktori Dengan Nama Mereka. Tidak ada berkas atau direktori seperti itu?

  1. Temukan file dan direktori di Linux dengan perintah find

  2. Pindahkan file di terminal Linux

  3. Bandingkan Direktori Tapi Bukan Isi File?

  1. Cara Mudah Menyembunyikan File dan Direktori di Linux

  2. Cara Menemukan File Di Linux Di Semua Direktori Secara Rekursif

  3. Cara tar (kompres) file, tidak termasuk file atau direktori tertentu