Invece di usare find(il che fa bene il lavoro), puoi anche usare la shell a tal fine.
Supponiamo che tu voglia tutti i file da $ PWD a $ DEST. Il tentativo naturale sarebbe:
mv $PWD/* $DEST
Come funziona? L'espressione "$ PWD / *" si espande nei nomi di tutti i file in quella directory. Questa funzione di shell si chiama "globbing". L'ultimo argomento di mvè la directory di destinazione. Se hai molti file, questo non funzionerà perché la lunghezza della riga di comando è limitata.
Ma la soluzione ha il problema di omettere file dot - o file "nascosti", file e directory il cui nome inizia con un ".". Per risolvere questo problema, devi dire alla tua shell di includere dotfile durante il globbing. Per fare questo, usa
shopt -s dotglob
quando si utilizza bash(e probabilmente si utilizza a bashmeno che non sia stata modificata l'impostazione predefinita). In questa shell, il comando sopra funzionerà anche per i dotfile.
A parte questo, zshhai la possibilità di scegliere questo caso per caso. Per fare questo, metti
setopt extendedglob
nel tuo .zshrc. Quindi puoi usare
mv $PWD/*(D) $DEST
per spostare tutti i file, inclusi i dotfile. (La "D" ha l'effetto di abilitare temporaneamente l'opzione "GLOB_DOTS").
Ora la domanda originale era spostare tutti i file regolari (non le directory) da tutte le sottodirectory e le loro sottodirectory in una singola directory. Questo può essere realizzato con zsh:
mv $PWD/**/*(D.)
Qui l'espressione **/*fa scendere globalmente ricorsivamente nelle sottodirectory. Il Dmezzo "seleziona anche dotfile"; il .mezzo "seleziona solo file regolari, non directory".