Tentativo di creare uno script shell per spostare tutti i file con un determinato anno nel loro nome in una directory basata su un anno


3

Ecco il blocco di codice che ho finora. Indipendentemente da ciò che faccio con il comando find, non riesco a farlo funzionare come voglio. Cercando di spostare tutti i file con questi nomi di lunghi anni nelle loro directory con nome.

for i in 2008 2009 2010 2011
do
mkdir /Users/benjaminbaker/Documents/Thesis/Data/EIA_AMI/Test/$i
find /Users/benjaminbaker/Documents/Thesis/Data/EIA_AMI/Test/ -iname '*$i*' -maxdepth 1  -type f  -exec mv -n {} /Users/benjaminbaker/Documents/Thesis/Data/EIA_AMI/Test/$i/ \;
done

Risposte:


0

Sostituire:

find /Users/benjaminbaker/Documents/Thesis/Data/EIA_AMI/Test/ -iname '*$i*' -maxdepth 1  -type f  -exec mv -n {} /Users/benjaminbaker/Documents/Thesis/Data/EIA_AMI/Test/$i/ \;

Con:

find /Users/benjaminbaker/Documents/Thesis/Data/EIA_AMI/Test/ -maxdepth 1 -iname "*$i*" -type f  -exec mv -n {} /Users/benjaminbaker/Documents/Thesis/Data/EIA_AMI/Test/$i/ \;

Il problema era che $inon si espandeva tra virgolette singole. Quindi, utilizzare "*$i*"al posto di '*$i*'.

Inoltre, findpreferisce specificare opzioni, come -maxdepth, prima dei test, come -iname. Nel codice sopra, l'ordine è stato modificato di conseguenza.

Infine, in due posti si utilizza ...Test/$isenza virgolette. Funziona qui solo perché $inon contiene spazi bianchi. In tal caso, dovrebbe essere tra virgolette doppie.


Reso un po 'meglio, ma ancora non si esegue correttamente. Il secondo $ i viene sostituito con nulla, quindi ha cercato di spostare i file nella stessa directory di origine
GentilmanMyles,

@GentilmanMyles Funziona bene per me. Se non funziona per te, dovrai essere più specifico su ciò che stai effettivamente facendo. Ad esempio, se $iha un valore, la shell non lo sostituirà mai con "niente".
Giovanni 1024

O a volte sono solo idiota e sto rovinando il mio ciclo for quando lo aggiungo. Grazie. Risolto e funziona.
GentilmanMyles,

@GentilmanMyles Molto bene. Sono contento che funzioni.
Giovanni 1024,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.