特定の条件を満たすファイルを選択する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'
grep -l -r "TWL" --exclude=*.csv* | xargs cp -t ~/data/lidar/tmp-ajp2/
説明:
-l
ファイル名のみを出力するオプション-t
オプションは、ターゲットディレクトリを指定します(そしてプレースホルダーの使用を避けます)xargsとplaceholderオプションが必要です:
grep -r "TWL" --exclude=*.csv* | xargs -I '{}' cp '{}' ~/data/lidar/tmp-ajp2/
通常、xargs
を使用する場合、出力がコマンドの後にプレースホルダー('{}'
この場合)、挿入する場所を何度でも選択できます。
特定の日付のファイルを検索するとき、これは私のために働いた:
ls | grep '2018-08-22' | xargs -I '{}' cp '{}' ~/data/lidar/tmp-ajp2/
Grepが検出したディレクトリにファイルをコピーするには、-printfを使用してディレクトリを出力し、-iを使用してxargからコマンド引数を配置します(パイプの後)
find ./ -name 'filename.*' -print '%h\n' | xargs -i cp copyFile.txt {}
これは、「filename」を含むすべてのディレクトリ(./)にcopyFile.txtをコピーします