¿Cómo muevo todos los archivos de un directorio (incluidos los ocultos) a otro directorio?
Por ejemplo, si tengo una carpeta "Foo" con los archivos ".hidden" y "notHidden" adentro, ¿cómo muevo ambos archivos a un directorio llamado "Bar"? Lo siguiente no funciona, ya que el archivo ".hidden" permanece en "Foo".
mv Foo/* Bar/
Pruébelo usted mismo.
mkdir Foo
mkdir Bar
touch Foo/.hidden
touch Foo/notHidden
mv Foo/* Bar/
Respuesta aceptada:
Zsh
mv Foo/*(DN) Bar/
o
setopt -s glob_dots
mv Foo/*(N) Bar/
(Omita el (N)
si sabe que el directorio no está vacío.)
Golpe
shopt -s dotglob nullglob
mv Foo/* Bar/
Ksh93
Si sabe que el directorio no está vacío:
FIGNORE='.?(.)'
mv Foo/* Bar/
Estándar (POSIX) sh
for x in Foo/* Foo/.[!.]* Foo/..?*; do
if [ -e "$x" ]; then mv -- "$x" Bar/; fi
done
Si está dispuesto a dejar que el mv
el comando devuelve un estado de error aunque tuvo éxito, es mucho más simple:
mv Foo/* Foo/.[!.]* Foo/..?* Bar/
búsqueda de GNU y mv de GNU
find Foo/ -mindepth 1 -maxdepth 1 -exec mv -t Bar/ -- {} +
Búsqueda estándar
Si no le importa cambiar al directorio de origen:
cd Foo/ &&
find . -name . -o -exec sh -c 'mv -- "[email protected]" "$0"' ../Bar/ {} + -type d -prune
Aquí hay más detalles sobre cómo controlar si los archivos de puntos coinciden en bash, ksh93 y zsh.
Golpe
Establecer el dotglob
opción.
$ echo *
none zero
$ shopt -s dotglob
$ echo *
..two .one none zero
También está el GLOBIGNORE
más flexible variable, que puede establecer en una lista separada por dos puntos de patrones comodín para ignorar. Si no está configurado (la configuración predeterminada), el shell se comporta como si el valor estuviera vacío if dotglob
está establecido, y como si el valor fuera .*
si la opción no está configurada. Consulte Expansión de nombre de archivo en el manual. Los directorios omnipresentes .
y ..
siempre se omiten, a menos que .
coincide explícitamente con el patrón.
$ GLOBIGNORE='n*'
$ echo *
..two .one zero
$ echo .*
..two .one
$ unset GLOBIGNORE
$ echo .*
. .. ..two .one
$ GLOBIGNORE=.:..
$ echo .*
..two .one
Ksh93
Establecer el FIGNORE
variable. Si no está configurado (la configuración predeterminada), el shell se comporta como si el valor fuera .*
. Para ignorar .
y ..
, deben coincidir explícitamente (el manual en ksh 93s+ 2008-01-31 establece que .
y ..
siempre se ignoran, pero esto no describe correctamente el comportamiento real).
$ echo *
none zero
$ FIGNORE='@(.|..)'
$ echo *
..two .one none zero
$ FIGNORE='n*'
$ echo *
. .. ..two .one zero
Puede incluir archivos de puntos en un patrón haciéndolos coincidir explícitamente.
$ unset FIGNORE
$ echo @(*|.[^.]*|..?*)
..two .one none zero
Para que la expansión salga vacía si el directorio está vacío, usa N
opción de coincidencia de patrones:~(N)@(*|.[^.]*|..?*)
o ~(N:*|.[^.]*|..?*)
.
Zsh
Establecer el dot_glob
opción.
% echo *
none zero
% setopt dot_glob
% echo *
..two .one none zero
.
y ..
nunca coinciden, incluso si el patrón coincide con el .
inicial explícitamente.
% echo .*
..two .one
Puede incluir archivos de puntos en un patrón específico con la D
calificador global.
% echo *(D)
..two .one none zero
Agrega el N
calificador glob para que la expansión salga vacía en un directorio vacío:*(DN)
.
Nota:puede obtener resultados de expansión de nombre de archivo en diferentes órdenes
(p. ej., none
seguido de .one
seguido de ..two
)
según la configuración de LC_COLLATE
, LC_ALL
y LANG
variables.