Je souhaite déplacer tous les fichiers *.txt
de tous les sous-répertoires situés dans un répertoire donné vers un répertoire de destination.
En procédant comme ci-dessous, il déplace TOUS les fichiers - comment puis-je le réduire à tous les fichiers *.txt
uniquement?
find -type f -print0|xargs -0r mv -it "/path to my folder/destination-directory"
Utilisez un motif global avec l’option -name
de find
pour indiquer le motif souhaité, *.txt
dans votre cas:
find . -type f -name '*.txt' -exec mv -t /destination {} +
Bien sûr, remplacez /destination
par le répertoire de destination actuel.
Notes:
Il n'est pas nécessaire de générer xargs
et un canal anonyme. Utilisez la logique mv
dans le prédicat -exec
de find
.
find ... -exec
gère tous les types de noms de fichiers possibles et ARG_MAX
ainsi
GNU mv
(par défaut sous Ubuntu) a -t
pour prendre un répertoire de destination, afin que vous puissiez utiliser l'argument +
de -exec
pour envoyer tous les fichiers en une seule exécution de mv
(ou au moins une exécution minimale si ARG_MAX
est déclenché dans le processus)
Ajouter un test -name
find -type f -name "*.txt" -print0 |...
N'oubliez pas de citer le glob pour empêcher les extensions de Shell.
Pour une recherche insensible à la casse, utilisez -iname
au lieu de -name
.
find /folder/ -type f -name "*.txt" -exec mv {} /other/folder/ \;
J'ai testé cela, fonctionne bien.
En utilisant votre commande d'origine:
find . -type f -name "*.txt" -print0|xargs -0r mv -it /path/to/destination
Info:
.
: recherche à l'emplacement actuel
"*.txt"
: fichiers portant l'extension .txt
dans leurs noms