kshスクリプトでfindコマンドを使用していますが、フルパスではなくファイル名を取得しようとしています。で、//severname/dir1/dir2/text.exeではなくtext.exeを返すようにします。ありFindはファイル名だけを出力し、フルパスは出力しません
どうすればそれを取得できますか?明確にするために、私はファイルが入っているディレクトリを知っている、私はちょうど作成されたものを取得しているので、パス名は重要ではない。
kshスクリプトでfindコマンドを使用していますが、フルパスではなくファイル名を取得しようとしています。で、//severname/dir1/dir2/text.exeではなくtext.exeを返すようにします。ありFindはファイル名だけを出力し、フルパスは出力しません
どうすればそれを取得できますか?明確にするために、私はファイルが入っているディレクトリを知っている、私はちょうど作成されたものを取得しているので、パス名は重要ではない。
あなたがそれを行うことができます。しかし、それは本当に意味をなさないん
find ..... |sed 's#.*/##'
?異なるディレクトリにある同じファイル名を持つ2つのファイルがある場合、それらをどのように区別できますか?
you are in /foo
/foo/a.txt
/foo/bar/a.txt
EDIT
編集いくつかの優れたテキストの書式を得るための答え。あなたはコメントで説明したように
、あなたが
これはワンショットで実行できます。
find ...|xargs tar -czf /path/to/your/target/a.gz
これはファイルを見つけ、ターゲットディレクトリにtar(a.gz)を作成します。
find ... -exec basename {} \;
でもトリックを行いますが、@Kentが尋ねるように、なぜこれをしたいですか?
この答えのように '-exec'を使用すると、見つかったすべてのファイルに対して外部プログラムが実行されます。 '-printf'オプションを使った@ glennjackmanの答えは、ファイルの数やオペレーティングシステムによりますます高速になります。 –
@StéphaneGourichonこれはGNU以外のシステムにとっては良い答えです。 OpenBSDの 'find'には' -printf'がありません – sheepdog
また、(GNU以外のものには必ずしも当てはまるわけではありませんが)複数の引数を渡すことができる 'basename -a'オプションがあり、' find'オプションは渡すことができます'-exec'には複数の引数があるので、実際にパフォーマンスが問題になる場合は、' find ... -exec basename -a {} + '(' \; 'の代わりに' + 'を書きます) – michael
あなたはGNUが見つけ使用している場合は、
find path -printf "%f\n"
は、単にファイル名を印刷して、パスを除外します。
ここに別の答えがあります。
find | awk -F/ '{print $NF}'
[ファイル名はlinux \ 'find \'で取得するだけですか?](http://stackoverflow.com/questions/5456120/how-to-only-get-file-name- with-linux-find) – BroSlow
これも[こちら](http://stackoverflow.com/questions/5456120/how-to-only-get-file-name-with-linux-find)と回答しています。 – sebastian
このファイルは重複しています。https://serverfault.com/questions/354403/remove-path-from-find-command-output – michael