パスなしでfindコマンドから名前のみを取得する方法


12

検索を使用して検索結果から名前のみを取得しようとしていますが、常にディレクトリも含まれています。findを使用して名前のみを印刷する(または変数に割り当てる)にはどうすればよいですか

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

これを変数に割り当てるための同様のコマンド、たとえば「resource」を使用して後で使用します。

編集:そして可能であれば、拡張子を除いた名前のみ。

回答:


19

使用する find trunk/messages/ -name "*.po" -exec basename {} .po \;

例と説明:

いくつかのテストファイルを作成します。

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

OK、パスを含むファイルが見つかります。

結果ごとに実行しbasename、名前の.po部分を削除します

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

まことにありがとうございます :)。DirからPO拡張のみを削除できますか?つまり、dir1 / po1.poとdir2 / po2.poは、dir1 / po1とdir2 / po2のように取得できますか?
ウェイクアップ

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

@slhckありがとう。最後に、拡張子のないファイル名と最後のフォルダを取得する必要があります:例:dir1 / subdir1 / subsubdir1 / po1.poおよびdir2 / subdir2 / subsubdir2 / po2.poは、subsubdir1 / po1のような変数に設定する必要がありますそれぞれsubsubdir2 / po2。
ウェイクアップ

@ user1754665うーん、多分find . -name '*.po' -type f -exec sh -c 'echo $(basename $(dirname $0))/$(basename $0)' {} \;
slhck

@Hennes最後の開き中括弧の前のバックスラッシュの目的は何findですか?
Utku

3

-execdirパスなしでファイルを印刷するパラメーターを使用できます。例:

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

拡張子のないファイル:

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

注:POSIXではないため、BSD findはクリーンなファイル名を出力しますが、GNU findを使用するとextraが出力され./ます。

参照:なぜGNU find -execdirコマンドの動作がBSD findと異なるのですか?


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.