GNU/Linux >> Tutoriels Linux >  >> Linux

Comment déplacer tous les fichiers (y compris cachés) d'un répertoire à un autre ?

Comment déplacer tous les fichiers d'un répertoire (y compris ceux cachés) vers un autre répertoire ?

Par exemple, si j'ai un dossier "Foo" avec les fichiers ".hidden" et "notHidden" à l'intérieur, comment puis-je déplacer les deux fichiers dans un répertoire nommé "Bar" ? Ce qui suit ne fonctionne pas, car le fichier ".hidden" reste dans "Foo".

mv Foo/* Bar/

Essayez-le vous-même.

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

Réponse acceptée :

Zsh

mv Foo/*(DN) Bar/

ou

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

(Laissez de côté le (N) si vous savez que le répertoire n'est pas vide.)

Frapper

shopt -s dotglob nullglob
mv Foo/* Bar/

Ksh93

Si vous savez que le répertoire n'est pas vide :

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

Standard (POSIX) sh

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

Si vous êtes prêt à laisser le mv commande renvoie un statut d'erreur même si elle a réussi, c'est beaucoup plus simple :

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

GNU find et GNU mv

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

Recherche standard

Si cela ne vous dérange pas de passer au répertoire source :

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

Voici plus de détails sur le contrôle de la correspondance des fichiers de points dans bash, ksh93 et ​​zsh.

Frapper

Définissez le dotglob option.

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

Il y a aussi le GLOBIGNORE plus flexible variable, que vous pouvez définir sur une liste séparée par deux-points de modèles génériques à ignorer. Si non défini (paramètre par défaut), le shell se comporte comme si la valeur était vide if dotglob est défini, et comme si la valeur était .* si l'option n'est pas définie. Voir Extension de nom de fichier dans le manuel. Les répertoires pervasifs . et .. sont toujours omis, à moins que le . correspond explicitement au motif.

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

Ksh93

Définissez le FIGNORE variable. S'il n'est pas défini (paramètre par défaut), le shell se comporte comme si la valeur était .* . Pour ignorer . et .. , ils doivent être mis en correspondance explicitement (le manuel dans ksh 93s+ 2008-01-31 indique que . et .. sont toujours ignorés, mais cela ne décrit pas correctement le comportement réel).

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

Vous pouvez inclure des fichiers de points dans un modèle en les faisant correspondre explicitement.

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

Pour que l'expansion sorte vide si le répertoire est vide, utilisez le N option de correspondance de modèle :~(N)@(*|.[^.]*|..?*) ou ~(N:*|.[^.]*|..?*) .

Zsh

Définissez le dot_glob option.

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

. et .. ne correspondent jamais, même si le modèle correspond au premier . explicitement.

% echo .*
..two .one

Vous pouvez inclure des fichiers de points dans un modèle spécifique avec le D qualificateur global.

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

Ajouter le N qualificatif glob pour que l'expansion sorte vide dans un répertoire vide :*(DN) .

Remarque :vous pouvez obtenir des résultats d'extension de nom de fichier dans différents ordres
(par exemple, none suivi de .one suivi de ..two )
en fonction de vos paramètres du LC_COLLATE , LC_ALL , et LANG variable.

Connexe :interroger la liste des serveurs pour la mémoire/le processeur alloué ?
Linux
  1. Comment déplacer des fichiers d'un compte utilisateur à un autre sur le même ordinateur ?

  2. Comment déplacer tous les fichiers source Java vers leur répertoire de packages respectif ?

  3. Comment descendre d'un répertoire ?

  4. CentOS / RHEL :Comment déplacer un groupe de volumes d'un système à un autre

  5. Comment copier une table d'une base de données mysql vers une autre base de données mysql

Comment copier un fichier d'un autre répertoire vers celui en cours ?

Comment copier les paramètres d'une machine à une autre ?

Comment déplacer des comptes d'un serveur cPanel vers un autre serveur cPanel ?

Comment renommer plusieurs fichiers d'une extension à une autre sous Linux/Unix ?

Comment déplacer tous les fichiers, y compris les fichiers cachés, dans le répertoire parent via *

Comment puis-je changer tous les fichiers appartenant à un utilisateur à un autre utilisateur ?