web-dev-qa-db-ja.com

出力をgrepからcpにパイプする方法は?

特定の条件を満たすファイルを選択するgrepコマンドが動作しています。選択したファイルをgrepコマンドから取得し、cpコマンドにパイプするにはどうすればよいですか?

cp側で次の試行が失敗しました。

grep -r "TWL" --exclude=*.csv* | cp ~/data/lidar/tmp-ajp2/

cp:「/ home/ubuntu/data/lidar/tmp-ajp2 /」の後に宛先ファイルのオペランドがありません詳細については、「cp --help」を試してください。


cp `grep -r "TWL" --exclude=*.csv*` ~/data/lidar/tmp-ajp2/

cp:無効なオプション-'7'

26
Borealis
grep -l -r "TWL" --exclude=*.csv* | xargs cp -t ~/data/lidar/tmp-ajp2/

説明:

  • grep -lファイル名のみを出力するオプション
  • ファイルリストを標準入力からコマンドライン引数に変換するxargs
  • cp -tオプションは、ターゲットディレクトリを指定します(そしてプレースホルダーの使用を避けます)
31
kostya

xargsplaceholderオプションが必要です:

grep -r "TWL" --exclude=*.csv* | xargs -I '{}' cp '{}' ~/data/lidar/tmp-ajp2/

通常、xargsを使用する場合、出力がコマンドの後にプレースホルダー('{}'この場合)、挿入する場所を何度でも選択できます。

19
Chris Maes

特定の日付のファイルを検索するとき、これは私のために働いた:

 ls | grep '2018-08-22' | xargs -I '{}' cp '{}' ~/data/lidar/tmp-ajp2/
5
MAbraham1

Grepが検出したディレクトリにファイルをコピーするには、-printfを使用してディレクトリを出力し、-iを使用してxargからコマンド引数を配置します(パイプの後)

find ./ -name 'filename.*' -print '%h\n' | xargs -i cp copyFile.txt {}

これは、「filename」を含むすべてのディレクトリ(./)にcopyFile.txtをコピーします

0
Jason