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.