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é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

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


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.