GNU/Linux >> Linux Esercitazione >  >> Linux

Come spostare tutti i file (inclusi quelli nascosti) da una directory all'altra?

Come faccio a spostare tutti i file in una directory (compresi quelli nascosti) in un'altra directory?

Ad esempio, se ho una cartella "Foo" con i file ".hidden" e "notHidden" all'interno, come faccio a spostare entrambi i file in una directory denominata "Bar"? Quanto segue non funziona, poiché il file ".hidden" rimane in "Foo".

mv Foo/* Bar/

Provalo tu stesso.

mkdir Foo
mkdir Bar
touch Foo/.hidden
touch Foo/notHidden
mv Foo/* Bar/

Risposta accettata:

Zsh

mv Foo/*(DN) Bar/

o

setopt -s glob_dots
mv Foo/*(N) Bar/

(Tralascia il (N) se sai che la directory non è vuota.)

Bash

shopt -s dotglob nullglob
mv Foo/* Bar/

Ksh93

Se sai che la directory non è vuota:

FIGNORE='.?(.)'
mv Foo/* Bar/

Standard (POSIX) sh

for x in Foo/* Foo/.[!.]* Foo/..?*; do
  if [ -e "$x" ]; then mv -- "$x" Bar/; fi
done

Se sei disposto a lasciare che mv comando restituisce uno stato di errore anche se è riuscito, è molto più semplice:

mv Foo/* Foo/.[!.]* Foo/..?* Bar/

GNU trova e GNU mv

find Foo/ -mindepth 1 -maxdepth 1 -exec mv -t Bar/ -- {} +

Ricerca standard

Se non ti dispiace passare alla directory di origine:

cd Foo/ &&
find . -name . -o -exec sh -c 'mv -- "[email protected]" "$0"' ../Bar/ {} + -type d -prune

Ecco maggiori dettagli sul controllo della corrispondenza dei file dot in bash, ksh93 e zsh.

Bash

Imposta il dotglob opzione.

$ echo *
none zero
$ shopt -s dotglob
$ echo *
..two .one none zero

C'è anche il più flessibile GLOBIGNORE variabile, che puoi impostare su un elenco separato da due punti di modelli di caratteri jolly da ignorare. Se non impostato (l'impostazione predefinita), la shell si comporta come se il valore fosse vuoto se dotglob è impostato e come se il valore fosse .* se l'opzione non è impostata. Vedere Espansione del nome file nel manuale. Le directory pervasive . e .. sono sempre omessi, a meno che il . corrisponde esplicitamente al modello.

$ GLOBIGNORE='n*'
$ echo *
..two .one zero
$ echo .*
..two .one
$ unset GLOBIGNORE
$ echo .*
. .. ..two .one
$ GLOBIGNORE=.:..
$ echo .*
..two .one

Ksh93

Imposta il FIGNORE variabile. Se non è impostato (l'impostazione predefinita), la shell si comporta come se il valore fosse .* . Per ignorare . e .. , devono essere abbinati esplicitamente (il manuale in ksh 93s+ 2008-01-31 afferma che . e .. vengono sempre ignorati, ma questo non descrive correttamente il comportamento effettivo).

$ echo *
none zero
$ FIGNORE='@(.|..)'
$ echo *
..two .one none zero
$ FIGNORE='n*'
$ echo *
. .. ..two .one zero

Puoi includere file di punti in uno schema abbinandoli esplicitamente.

$ unset FIGNORE
$ echo @(*|.[^.]*|..?*)
..two .one none zero

Per fare in modo che l'espansione esca vuota se la directory è vuota, utilizzare il N opzione di corrispondenza del modello:~(N)@(*|.[^.]*|..?*) o ~(N:*|.[^.]*|..?*) .

Zsh

Imposta il dot_glob opzione.

% echo *
none zero
% setopt dot_glob
% echo *
..two .one none zero

. e .. non vengono mai abbinati, anche se il modello corrisponde al . esplicitamente.

% echo .*
..two .one

Puoi includere file di punti in uno schema specifico con la D qualificatore globale.

% echo *(D)
..two .one none zero

Aggiungi il N qualificatore glob per far uscire l'espansione vuota in una directory vuota:*(DN) .

Nota:potresti ottenere risultati di espansione del nome file in ordini diversi
(ad es. none seguito da .one seguito da ..two )
in base alle tue impostazioni di LC_COLLATE , LC_ALL e LANG variabili.

Correlati:interrogare l'elenco dei server per memoria/cpu allocata?
Linux
  1. CentOS / RHEL:come spostare un gruppo di volumi da un sistema all'altro

  2. Come copiare una tabella da un database mysql a un altro database mysql

  3. Come rinominare più file da un'estensione all'altra in Linux / Unix?

  4. Come spostare tutti i file inclusi i file nascosti nella directory principale tramite *

  5. Come posso cambiare tutti i file appartenenti a un utente a un altro utente?

Come copiare un file da un'altra directory a quella corrente?

Come spostare gli account da un server cPanel a un altro server cPanel?

Come copiare i primi 10 file più recenti da una directory all'altra?

Come spostare tutti i file dalla directory corrente alla directory superiore?

Come sostituire tutti i contenuti di una cartella con un'altra

Qual è il modo più veloce per spostare un milione di immagini da una directory all'altra in Linux?