Question

J'ai un répertoire comme celui-ci:

dir
dir/somefile.txt
dir/subdir/subsub/somefile2.txt
dir/subdir2/somefile.txt

et je veux ouvrir tous les fichiers dans tous les sous-répertoires dans une seule instance d'une commande. Je tentais trouver avec exec, ou xargs, mais ceux-ci ouvrir chaque fichier avec une instance distincte d'une commande.

En fait, je veux quelque chose qui finit comme kate dir/somefile.txt dir/subdir/subsub/somefile2.txt dir/subdir2/somefile.txt, mais pour un certain nombre de fichiers dans un certain nombre de sous-répertoires. J'utilise bash, mais des suggestions de script sont très bien.

précision: je ne signifie pas seulement les fichiers txt, mais tout fichier ascii (. Php-à-dire, txt, .html, etc ..)

Était-ce utile?

La solution

Essayez

kate `find . -name \*.txt -type f`

où le -type f vous empêche de frapper les répertoires.

Voici un exemple en utilisant ls -1 au lieu de kate:

edd@ron:~/src/debian/R$ ls -1 `find . -type f -name \*.txt`
./R-2.10.0/src/extra/graphapp/readme.txt
./R-2.10.0/src/extra/xdr/copyrght.txt
./R-2.10.0/src/extra/xdr/README.txt
./R-2.10.0/src/gnuwin32/fixed/etc/rgb.txt
./R-2.10.0/src/gnuwin32/installer/CustomMsg.txt
./R-2.10.0/src/library/grid/inst/doc/changes.txt
./R-2.10.0/src/unix/system.txt
./R-2.9.2-ra-1.2.8/src/extra/graphapp/readme.txt
./R-2.9.2-ra-1.2.8/src/extra/xdr/copyrght.txt
./R-2.9.2-ra-1.2.8/src/extra/xdr/README.txt
./R-2.9.2-ra-1.2.8/src/gnuwin32/fixed/etc/rgb.txt
./R-2.9.2-ra-1.2.8/src/gnuwin32/installer/CustomMsg.txt
./R-2.9.2-ra-1.2.8/src/library/grid/inst/doc/changes.txt
./R-2.9.2-ra-1.2.8/src/unix/system.txt
edd@ron:~/src/debian/R$

et si vous voulez vraiment tous les fichiers dans les sous-répertoires l'appel simplifie à

kate `find . -type f`

si vous êtes dans dir/ ou autre

kate `find dir -type f`

Autres conseils

Il y a plusieurs options possibles pour cela. Ces réponses sont basées sur votre scénario où vous savez que tous les fichiers peuvent être ouverts par kate, et que vous voulez ouvrir les fichiers avec une extension quelconque.

find dir -type f -exec kate {} +  

kate $(find dir -type f)

kate `find dir -type f`

Les deuxième et troisième formes sont presque équivalentes. La principale différence [1] est que la première version traitera des fichiers avec des espaces en leur nom, alors que le deuxième et le troisième ne le font pas.

[1] Merci pour avoir signalé NVRAM, je ne savais pas quand je posté la réponse.

kate $(find dir -type f)

Vous êtes soit pas très familier avec xargs, ou que vous ne l'utilisez pas correctement, parce que ce que vous essayez de faire est de exactement le problème xargs est conçu pour résoudre: Etant donné un arbitraire longue liste de chaînes, comme arguments les passer à un programme aussi peu d'exécutions que possible tout en ne dépassant pas les limites du système sur le nombre d'arguments d'un programme peut prendre.

Vous avez raison de find ... -exec, mais peut également être fixé. Il suffit d'ajouter + à la fin de la commande et le tour est joué find, il se comporte comme xargs.

Aucune des solutions ci-dessus que l'utilisation kate $(...) (ou l'équivalent avec des accents graves) travaillent en général (ils ne prennent pas en charge les noms de fichiers avec des espaces, ne fonctionneront pas du tout si la liste des fichiers est très longue). Les deux find ... + et xargs contourner ces limitations.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top