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.