Copie tous les fichiers avec une extension donnée de tous les sous-répertoires
Sous unix, je veux copier tous les fichiers avec une extension donnée (tous les fichiers excel) de tous les sous-répertoires d'un répertoire. J'ai la commande suivante:
cp --parents `find -name \*.xls*` /target_directory/
Les problèmes avec cette commande sont:
-
Il copie la structure de répertoire ainsi, et je veux seulement les fichiers (donc tous les fichiers finissent /target_directory/)
-
Il ne copie pas les fichiers avec des espaces dans les noms de fichiers (qui sont assez nombreux)
Toutes les solutions pour ces problèmes?
- Qu'en est
find... exec mv
? - Double Possible de Déplacer des fichiers dans les répertoires de base sur l'extension
Vous devez vous connecter pour publier un commentaire.
--parents
est la copie de la structure de répertoire, de sorte que vous devriez vous débarrasser de cela.La façon dont vous avez écrit cela, le
find
s'exécute, et la sortie est mis sur la ligne de commande tels quecp
ne peut pas distinguer entre les espaces séparant les noms de fichiers, et les espaces dans le nom de fichier. C'est mieux de faire quelque chose commedans lequel
cp
est exécutée pour chaque nom de fichier quifind
trouve, et a adopté le nom de fichier correctement. Voici plus d'infos sur cette technique.Au lieu de tous les ci-dessus, vous pouvez utiliser zsh et tapez simplement
zsh
pouvez développer des caractères génériques pour inclure les sous-répertoires et ce genre de chose très facile.Bash
4.0+ etksh93
prend également en charge**
. Pour bash, utilisezshopt -s globstar
pour l'activer. Pour ksh, c'estset -G
ouset -o globstar
.find . -name '*.xls' -print0 | xargs -0 cp -t destdir
zsh cp
variante plut au sein d'un répertoire:cp -pPR **en.lproj/*.strings SignLocalization
.fish
.De tout ce qui précède, je suis venu avec cette version.
Cette version fonctionne aussi pour moi dans la récupération de mac terminal.
Il va chercher dans le répertoire courant et de façon récursive dans tous les sous répertoires pour les fichiers avec l'extension xsl. Il permet de copier tous dans le répertoire cible.
cp indicateurs sont:
en cours de copie)
J'ai eu un problème similaire. Je l'ai résolu en utilisant:
La
'{}'
et";"
exécute la copie sur chaque fichier.J'ai également eu à le faire moi-même. Je l'ai fait via le --parents argument pour le cp:
vous pouvez supprimer l'-parents, mais il y a un risque de collision si plusieurs fichiers portent le même nom.