Comment obtenir uniquement les noms de la commande find sans chemin

14

J'essaie d'obtenir uniquement les noms des résultats de recherche en utilisant find, mais cela inclut toujours les répertoires également. Comment imprimer uniquement les noms (ou les affecter à une variable) en utilisant find

find trunk/messages/ -name "*.po" -printf '%f\n'

une commande similaire pour l'attribuer à une variable, par exemple "ressource" pour l'utiliser plus tard.

EDIT: Et si possible uniquement le nom à l'exclusion de l'extension.

Réveillez-vous
la source

Réponses:

20

Utilisation find trunk/messages/ -name "*.po" -exec basename {} .po \;

Exemple et explications:

Créez des fichiers de test:

$ touch test1.po  
$ touch test2.po  
$ find . -name "*.po" -print
./test1.po  
./test2.po

Ok, les fichiers sont trouvés, y compris le chemin.

Pour chaque résultat, exécutez basenameet supprimez la partie .po du nom

$ find . -name "*.po" -exec basename \{} .po \;  
test1  
test2
Hennes
la source
Grand merci :). Puis-je supprimer uniquement l'extension PO des répertoires? Je veux dire: dir1 / po1.po et dir2 / po2.po peuvent-ils être obtenus comme dir1 / po1 et dir2 / po2?
réveil
@ user1754665find . -name '*.po' -exec bash -c 'echo ${0%.po}' {} \;
slhck
@slhck merci. enfin, je dois obtenir le nom de fichier sans extension et le dernier dossier où il se trouve: par exemple: dir1 / subdir1 / subsubdir1 / po1.po et dir2 / subdir2 / subsubdir2 / po2.po doit être défini sur une variable comme: subsubdir1 / po1 subsubdir2 / po2, respectivement.
réveil
@ user1754665 Hmm, peutfind . -name '*.po' -type f -exec sh -c 'echo $(basename $(dirname $0))/$(basename $0)' {} \;
slhck
@Hennes Quel est le but de la barre oblique inverse avant l'accolade ouvrante dans le dernier find?
Utku
3

Vous pouvez utiliser un -execdirparamètre qui imprimerait le fichier sans chemin, par exemple:

find . -name "*.po" -execdir echo {} ';'

Fichiers sans extensions:

find . -name "*.txt" -execdir basename {} .po ';'

Remarque: Étant donné qu'il ne s'agit pas de POSIX, BSD findimprimera des noms de fichiers propres, mais l'utilisation de GNU finden imprimera plus ./.

Voir: Pourquoi la commande GNU find -execdir se comporte-t-elle différemment de BSD find?

Kenorb
la source