J'ai une arborescence de répertoires, où chaque sous-répertoire contient plusieurs types de fichiers différents, je veux copier un type de fichier particulier à partir de chacun des sous-répertoires, mais je dois aplatir les résultats, de sorte qu'ils se retrouvent tous dans un seul répertoire - en ne copiant que les fichiers nouvellement ajoutés et en préservant les permissions J'ai utilisé cp sous zsh, avec la ligne de commande suivante
cp -np **/*.ftype ../destination
Ce qui a fonctionné brillamment jusqu'à présent. Cependant, je viens d'atteindre une limite, je ne sais pas si c'est le nombre de répertoires dans le répertoire source (actuellement 217) ou le nombre total de répertoires / fichiers souhaités, (quelque part entre 2672 et 2690) mais soudainement j'obtiens l'erreur suivante argument list too long: cp
J'espérais utiliser quelque chose comme cp -np [A-Ma-m]**/*.ftype ../destination
et de diviser le travail en plusieurs parties, mais j'obtiens no matches found: [A-Ma-m]**/*.ftype
même si je sais que j'ai des répertoires qui commencent par ces plages.
J'ai aussi essayé
find Base_dir/ -iname '*.ftype' | xargs -J% cp -np % ../destination
mais il semble que cela casse les répertoires à chaque fois qu'il y a un caractère espace dans le nom, donc il ne copie rien.
Je suis sûr que je fais quelque chose de stupidement mauvais, mais toute aide serait appréciée.
1 votes
J'essaie d'utiliser
-print0
avecfind
et-0
avecxargs
. Lisez également le page de manuel de chaque commande .0 votes
Si j'ai 2 fichiers dans le dossier avec le même nom, mais des extensions différentes, par exemple fred.ftype et fred.bar, les deux fichiers sont copiés dans le dossier de destination.
1 votes
Dominic Strange, Sans avoir vu le véritable commande que vous avez utilisé, la seule chose que je peux dire, c'est que lorsque j'utilise e.g.
find . -iname '*.ftype' -print0
il ne renvoie quefred.ftype
selon le même scénario que celui présenté dans votre commentaire.