Modo 1: nel browser dei file grafici, usando una vista ad albero
Presumo che il tuo vero obiettivo sia quello di fare una scelta per ogni file e, non parlando rigorosamente, di essere richiesto . Tuttavia, se si preferisce ricevere una richiesta su ciascun file in un terminale, vedere il modo 2 di seguito.
La maggior parte dei browser di file grafici supporta una visualizzazione ad albero in cui è possibile visualizzare contemporaneamente più livelli di una gerarchia di directory. È possibile copiare o spostare i file da questa vista, individualmente o selezionandoli e quindi operando sull'intera selezione. Funziona anche con file di più cartelle.
In alcuni browser di file, è necessario accedere al menu Preferenze per abilitare la visualizzazione ad albero. In Caja, il browser dei file MATE, è sempre abilitato nella visualizzazione elenco. Fai clic su Visualizza → Elenco (o premi Ctrl+ 2) per passare alla visualizzazione elenco. Ogni directory ha un piccolo triangolo rivolto a destra alla sua sinistra, a indicare che può essere espansa. Per espandere una cartella, fai clic su quel triangolo o premi il tasto →(freccia destra) quando la cartella è selezionata. In questo esempio, li ho selezionati tutti uno per uno e li sto trascinando tutti in una volta la loro destinazione:
Supponendo che l'origine e la destinazione siano sulla stessa unità, trascinando le mosse per impostazione predefinita. Se invece volessi copiare, tieni premuto il Ctrltasto.
In teoria, è facile correggere gli errori quando si utilizza questo metodo, poiché la maggior parte dei browser di file (incluso Caja) supporta Ctrl+ Zper annullare le azioni recenti, incluse le azioni batch. Tuttavia, ho avuto fortuna mista con quello. A volte i file tornano nella cartella sbagliata.
La buona notizia è che sembra che tu stia lavorando principalmente con documenti di testo, che tendono ad essere piccoli, quindi puoi fare un backup extra con tar
prima senza molta seccatura. Suggerisco di farlo indipendentemente dal metodo utilizzato.
Modo 2 : il find
comando con l' -ok
azione
È uso comune find
trovare file e passare i loro percorsi a un comando esterno arbitrario con le azioni -exec
e -execdir
. Ma find
ha anche -ok
e -okdir
quel prompt prima di ogni volta che eseguono un comando. Se vuoi davvero essere richiesto in un terminale su ogni file, penso che questa sia la strada da percorrere.
Al termine per produrre gli stessi effetti mostrati sopra, è simile al seguente:
ek@Gnar:~$ find Texts -xtype f -ok mv -t 'Glorious Destination Folder' {} \;
< mv ... Texts/Robert Frost/New Hampshire.pdf > ? y
< mv ... Texts/Robert Frost/In The Clearing.pdf > ? n
< mv ... Texts/Helen Keller/The Story of My Life.pdf > ? y
< mv ... Texts/Saki/The Short Stories of Saki.pdf > ? y
< mv ... Texts/Jane Austen/Sense and Sensibility.pdf > ? n
< mv ... Texts/Jane Austen/Pride and Prejudice.pdf > ? y
< mv ... Texts/Richard Connell/The Stolen Crime.pdf > ? n
< mv ... Texts/Richard Connell/The Most Dangerous Game.txt > ? y
< mv ... Texts/Mary Wollstonecraft Shelley/Mathilda.epub > ? n
< mv ... Texts/Mary Wollstonecraft Shelley/Frankenstein: Or, The Modern Prometheus.pdf > ? y
< mv ... Texts/W. E. B. Du Bois/The Souls of Black Folk.pdf > ? n
< mv ... Texts/W. E. B. Du Bois/Darkwater: Voices from within the Veil.htm > ? y
Sostituisci Texts
con la directory di origine (che potrebbe essere solo .
se ci sei cd
) e Glorious Destination Folder
con la directory di destinazione effettiva.
Questo esegue un comando per file; diversamente da -exec
e -execdir
, -ok
e -okdir
non supporta +
al posto di \;
passare più percorsi trovati nella stessa invocazione di un comando. Di conseguenza, non è necessario utilizzare il -t dest
modulo di mv
. Suggerisco di farlo in ogni caso, però, sia , in generale, con find
e in particolare in questa situazione così le indicazioni sembrano più i comandi che stanno spingendo circa.
Mentre viene scritto quel comando, se find
incontra un collegamento simbolico che alla fine punta a un file normale, esso (il collegamento, non la destinazione) viene spostato anziché ignorato. Se vuoi davvero far funzionare solo un file normale, usa -type f
invece di -xtype f
.
Potresti voler fare questo in una script
sessione in modo da poter capire cosa è successo se commetti un errore. Ma ancora una volta, nessun motivo per non avere un backup.
Modo 3: generare un manifest e modificarlo
Almeno fino a quando i file non hanno find
una nuova riga nei loro nomi, puoi iniziare usando un semplice comando per generare un manifest - un file che elenca i nomi dei file a cui (in questo caso potenzialmente) sei interessato) :
find Texts -xtype f >manifest
Sostituisci manifest
con il nome che preferisci per il file che elenca i file in esame (e regola le direzioni rimanenti di conseguenza).
Come sopra, sostituiscilo Texts
con la tua vera directory di origine, che potrebbe essere .
se ci sei riuscito cd
. Tuttavia, se Texts
è un percorso relativo (incluso se è .
), è necessario assicurarsi di trovarsi nella stessa posizione in un secondo momento quando si eseguono effettivamente le mosse.
Dopo aver eseguito quel find
comando, apri manifest
in un editor di testo. Questo potrebbe essere nano
, vim
, emacs
, gedit
, pluma
, ecc l'editor, commento fuori le righe che i file nome che non si desidera spostare ponendo #
un'all'inizio del loro. Alcuni editor metteranno in evidenza queste righe in modo diverso anche quando non riconoscono che il tuo file sia del formato che sa avere commenti. La maggior parte non lo farà, tuttavia, e il vero motivo per cui suggerisco di farlo in questo modo è che tu, come essere umano, è probabile che tu abbia esperienza di commentare le righe nei file di configurazione (e forse nel codice sorgente). Penso che questo sia più intuitivo, e meno soggetto a errori, rispetto a quello che sarebbe segnare le linee che si desidera spostare.
Ovviamente, potresti invece semplicemente eliminare le righe per i file che non vuoi spostare. Il vantaggio di commentarli è che sarà chiaro in seguito cosa hai fatto.
Nel mio esempio, ecco come apparivano i contenuti del file dopo averlo modificato:
Texts/Robert Frost/New Hampshire.pdf
# Texts/Robert Frost/In The Clearing.pdf
Texts/Helen Keller/The Story of My Life.pdf
Texts/Saki/The Short Stories of Saki.pdf
# Texts/Jane Austen/Sense and Sensibility.pdf
Texts/Jane Austen/Pride and Prejudice.pdf
# Texts/Richard Connell/The Stolen Crime.pdf
Texts/Richard Connell/The Most Dangerous Game.txt
# Texts/Mary Wollstonecraft Shelley/Mathilda.epub
Texts/Mary Wollstonecraft Shelley/Frankenstein: Or, The Modern Prometheus.pdf
# Texts/W. E. B. Du Bois/The Souls of Black Folk.pdf
Texts/W. E. B. Du Bois/Darkwater: Voices from within the Veil.htm
Quindi puoi filtrare le righe commentate con grep
e convogliare il risultato xargs
per passarle a mv
:
grep -Pv '^\s*#' manifest | xargs -d '\n' mv -t 'Glorious Destination Folder'
Come sopra, sostituire Glorious Destination Folder
con il nome della destinazione effettiva. Questo è tutto; i tuoi file vengono spostati. Puoi ovviamente scrivere echo
prima mv
di vedere i comandi che verranno eseguiti per primi, se lo desideri.
Il modo in cui funziona il comando è:
- Il
grep
comando genera righe da manifest
that don't ( -v
) start ( ^
) con optional ( *
) whitespace ( \s
) seguito da un #
carattere letterale . La -P
bandiera seleziona PCRE come dialetto delle espressioni regolari (che abilita \s
ciò che considero più leggibile rispetto al tradizionale [[:space:]]
).
- Il
xargs
comando divide il suo input (che è l'output di grep
) in campi con fine riga ( -d '\n'
), quindi incolla ogni campo (senza la riga di fine nuova) come argomento separato alla fine del comando mv -t 'Glorious Destination Folder'
, che viene eseguito.
-ok
IMHO la migliore risposta