特定のファイル名を持つファイルを返すために使用したいと思いますfind
。この場合_
。
使えることを学びました
find . ! '(' -name '_*' ')'
しかし、古いパス名なしでファイル名を返したいと思います。basename
bashでcmdを使用してこれを行う方法はありますか?
また、これを行うことができる他のコマンドも開いていますls
。
答え1
はい、-を使用してジョブにbasename
パラメータとして渡すことができます。-exec
find . ! -name '_*' -exec basename {} \;
(演算子優先順位の問題がないため、グループ化角括弧は必要ありません。)
または、GNUがある場合、find
その-printf
操作は一般的なファイル名のフォーマット指定子を提供します。
%f File's name with any leading directories removed (only the last element).
だから
find . ! -name '_*' -printf '%f\n'
答え2
正しい形式は次のようになり、必要に応じてファイル名印刷するにはfind
、shell (POSIX sh/bash/Korn/zsh) parameter substitution expansion
.:
find /path/to -type f -name "[!_]*" -exec sh -c 'printf "%s\n" "${1##*/}"' _ {} \;
あるいは、あなたが先頭に立つことが大丈夫なら、私たちはfind
組み合わせることができます。-execdir
./
find /path/to -type f -name "[!_]*" -execdir printf '%s\n' {} +
あなたもそれを使用することができますfind -type f ! -name "_*" ...
。
答え3
find . -type f ! -name "_*" -printf "%f\n"
withはPOSIXのGNU拡張printf
です。%f
find