web-dev-qa-db-ja.com

検索にフルパスではなくファイル名のみを印刷させる

Kshスクリプトでfindコマンドを使用していますが、フルパスではなくファイル名のみを取得しようとしています。同様に、//severname/dir1/dir2/text.exeではなくtext.exeを返すようにします。

それをどうやって手に入れますか?明確にするために、ファイルが存在するディレクトリを知っています。特定の日付の前に作成されたものを取得しているだけなので、パス名は関係ありません。

29
Steve

あなたはそれを行うことができます:

find ..... |sed 's#.*/##'

しかし、それは本当に意味がありますか?同じファイル名で異なるディレクトリにある2つのファイルがある場合、それらをどのように区別できますか?

例えば.

you are in /foo

/foo/a.txt
/foo/bar/a.txt

[〜#〜] edit [〜#〜]

回答を編集して、テキストの書式設定を改善します。

コメントで説明したように、

  1. いくつかのファイルを見つけ、
  2. それらをディレクトリにコピーし、
  3. それらをアーカイブにgzipしてa.gzと言う
  4. ステップ2が成功した場合にのみ、コピーされたファイルを削除します

これはワンショットで実行できます。

find ...|xargs tar -czf /path/to/your/target/a.gz 

これにより、ファイルが検索され、ターゲットディレクトリにtar(a.gz)が作成されます。

13
Kent

GNU findを使用している場合、

find path -printf "%f\n"

ファイル名を出力し、パスを除外します。

69
glenn jackman
find ... -exec basename {} \; 

トリックも行います。

17
evil otto

別の答えがあります。

find | awk -F/ '{print $NF}'    
4
Chaya Balram

GNU findは-printfを使用してこれをネイティブにサポートするため、必要なことは

find ... -printf '%f\n'
0
haridsv