Come ottenere solo nomi dal comando find senza percorso


14

Sto cercando di ottenere solo i nomi dai risultati della ricerca usando find, ma include sempre anche le directory. Come posso stampare solo i nomi (o assegnare a una variabile) usando find

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

un comando simile per assegnarlo a una variabile, ad esempio "risorsa" per utilizzarlo in seguito.

EDIT: E se possibile solo il nome esclusa l'estensione.

Risposte:


20

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

Esempio e spiegazioni:

Crea alcuni file di test:

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

Ok, i file vengono trovati, incluso il percorso.

Per ogni risultato basename, eseguire e rimuovere la parte .po del nome

$ find . -name "*.po" -exec basename \{} .po \;  
test1  
test2

Grazie mille :). Posso rimuovere solo l'estensione PO dalle directory? Voglio dire: dir1 / po1.po e dir2 / po2.po possono essere ottenuti come dir1 / po1 e dir2 / po2?
sveglia

@ user1754665find . -name '*.po' -exec bash -c 'echo ${0%.po}' {} \;
slhck

@slhck grazie. infine ho bisogno di ottenere il nome del file senza estensione e l'ultima cartella in cui si trova: ad esempio: dir1 / subdir1 / subsubdir1 / po1.po e dir2 / subdir2 / subsubdir2 / po2.po dovrebbero essere impostati su una variabile come: subsubdir1 / po1 subsubdir2 / po2, rispettivamente.
sveglia

@ user1754665 Hmm, forsefind . -name '*.po' -type f -exec sh -c 'echo $(basename $(dirname $0))/$(basename $0)' {} \;
slhck

@Hennes Qual è lo scopo della barra rovesciata prima dell'apertura tra parentesi graffa dell'ultimo find?
Utku,


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.