Devo spostare i file leggendone i nomi.
Devo spostare i file generati dal sistema ei nomi includono un timestamp. Devo spostare i file leggendo il nome del file per mese.
Se il nome del file contiene 201601*.txt , quindi passa a 2016/January directory. Se il nome del file contiene 201602*.txt quindi passa a 2016/February directory ecc.
Risposta accettata:
Bene, se le stringhe di data sono nei nomi dei file e tutti i file sono nella stessa directory, potresti fare:
mv 201601*.txt 2016/January
Farlo 12 volte manualmente sarebbe una seccatura, quindi creerei un elenco con il numero e il nome del mese corrispondente:
$ 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
E poi analizzalo per creare il mv comandi:
$ 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
Una volta che sei sicuro che fa ciò di cui hai bisogno, rimuovi echo per spostare effettivamente i 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
Spiegazione
Il grep -Po 's+K[A-Z]w{2,}') eseguirà grep con espressioni regolari compatibili con Perl (-P ) e stamperà solo la parte o le parti corrispondenti di ciascuna riga (-o ). L'espressione regolare utilizzata cercherà uno o più spazi bianchi (s+ ) seguito da una lettera maiuscola ([A-Z] ) e 2 o più caratteri alfanumerici (w{2,} ). Il K significa "ignora tutto prima di questo" che farà sì che il comando stampi solo la parte delle stringhe corrispondenti dopo lo spazio bianco. Il tutto stampa semplicemente l'elenco dei mesi.