コマンド:
grep -rl "KORD" ./
ディレクトリを検索し、ファイルの内容に「KORD」を含むファイルのリストを返します(タイトルではありません)。
Users-MacBook-Air:myPhotorec user$ grep -rl "KORD" ./
.//output_apikey.txt
.//recup_dir.17/f13470392.txt
.//recup_dir.49/f45361992.txt
.//recup_dir.49/f45362424.txt
.//recup_dir.53/f48768408.txt
.//recup_dir.53/f49295480.txt
grepコマンドを拡張して出力ファイルリストをコンソールに出力し、各ファイルをディレクトリにコピーする優先コマンド(xargs?)はありますか?./ ORD?
「猫の皮を剥ぐ」には複数の方法があると思います。複数の解決策を見るのを楽しみにしています。
ラベルが重複しているため、この変更された投稿を回答として投稿できません。
試してみてください:
grep -rl --null --include '*.txt' KORD . | xargs -0r cp -t /path/to/dest
このコマンドはNUL区切りを使用するため、空白、タブ、さらには改行を含む難しい名前のファイルを含むすべてのファイル名に対して安全です。
上記にはGNUが必要cp
です。BSD / OSXの場合は、次を試してください。
grep -rl --null --include '*.txt' KORD . | xargs -0 sh -c 'cp "$@" /path/to/dest' sh
使い方:
grep
オプションと引数
-r
ディレクトリ構造を再帰的に検索するようにgrepに指示します。(FreeBSDでは、-r
ディレクトリへのシンボリックリンクをたどります。これは、OS / Xまたは最近のバージョンのGNUには当てはまりませんgrep
。)
--include '*.txt'
名前がglobと一致するファイル*.txt
(.foo.txt
またはのような非表示のファイルを含む.txt
)のみを返すようにgrepに指示します。
-l
一致するファイル自体ではなく、一致するファイルの名前のみを返すようにgrepに指示します。
--null
ファイル名を区切るためにNUL文字を使用するようにgrepに指示します。
LINUX/UNIX
内容に正規表現が含まれているファイルのみを検索するようにgrepに指示します LINUX/UNIX
.
現在のディレクトリを検索します。最近のバージョンのGNUgrep
では省略できますが、で始まるファイル名を防ぐ--
ためcp
にオプションターミネータを渡す必要があります-
。
xargs
オプションと引数
-0
XargsにNULで区切られた入力を期待するように指示します。
-r
少なくとも1つのファイルが見つからない限り、コマンドを実行しないようにxargsに指示します。(このオプションはBSDまたはOSXのどちらでも必要ではなく、OSXと互換性がありませんxargs
。)
cp -t /path/to/dest
ディレクトリをターゲットディレクトリにコピーします。(-t
GNUが必要cp
です。)
find . -type f -exec grep -q 'KORD' {} ';' -exec cp {} ./ORD ';'
これにより、現在のディレクトリ内またはその下にあるすべての通常のファイルが検索されます。grep -q 'KORD'
各ファイルで実行され、一致する行を含むファイルがディレクトリにコピーされ./ORD
ます。
GNU coreutilsがインストールされている場合は、もう少し効率的に使用できます。
find . -type f -exec grep -q 'KORD' {} ';' -exec cp -t ./ORD {} +
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加