Disons que j'ai un répertoire /home/smit/test
. A l'intérieur, j'ai plusieurs sous-répertoires et fichiers. Je souhaite supprimer uniquement le répertoire /home/smit/test
et non son contenu interne. Ainsi, les fichiers et sous-répertoires de /home/smit/test
seront automatiquement inclus dans /home/smit/
?
En outre, dans un cas réel, j'ai le répertoire /usr/share/backgrounds/all/
qui contient de nombreux sous-répertoires. et ces sous-répertoires ont beaucoup d'images. Je souhaite supprimer tous les sous-répertoires afin que leur contenu soit inclus dans /usr/share/backgrounds/all/
. Je peux le faire avec une interface graphique, mais je veux le faire de manière cool par terminal. Comment puis-je le faire?
Dans ces situations, les fichiers portant le même nom risquent d’être écrasés. Comme mentionné par @Arronical, vous pouvez éviter cela en utilisant l'indicateur -b
à mv
, ce qui permet de différencier tous les fichiers portant le même nom en ajoutant ~
à leurs noms. Toutefois, si trois fichiers ou plus portent le même nom, seuls le premier et le dernier seront enregistrés. Vérifiez le contenu avant de procéder au déplacement afin de protéger vos fichiers.
Le premier cas simple est facile; nous pouvons utiliser un shell glob. Cependant, cela ne déplacera pas les fichiers cachés, donc si vous avez un nom de fichier commençant par .
, commencez par activer dotglob
shopt -s dotglob
Ensuite, vous pouvez exécuter:
mv -b /home/smit/test/* /home/smit
rmdir /home/smit/test
Désactivez dotglob
si vous le souhaitez (il reviendra quand même à la valeur par défaut lorsque vous ouvrirez un nouveau shell):
shopt -u dotglob
Pour le deuxième cas (réel), nous utiliserons find
, qui déplace les fichiers cachés par défaut:
Assurez-vous que vous êtes au bon endroit en premier.
cd /usr/share/background/all
find -type f -exec echo mv -vb -- {} . \;
Si cela vous convient, exécutez-le sans echo
pour déplacer les fichiers.
find -type f -exec mv -vb -- {} . \;
Puis trouver les annuaires
find -type d
Si vous voyez ce que vous voulez supprimer:
find -type d -delete
Ceci est sûr car il refusera de supprimer les répertoires qui ont encore du contenu.