コマンドを探し、grepとmvを見つけます。

コマンドを探し、grepとmvを見つけます。

私のSRCフォルダにはたくさんのファイルがあります。特定のパターンに従うすべてのファイルをこのSRCフォルダから別のDSTフォルダに移動し、ファイル名を目的の拡張子に変更したいと思います。

例パラメータ

SRCディレクトリ/Vinodh

フォルダ内のファイルに/VinodhTEST01、、、、TEST02TEST03TEST04

TEST02TEST03単語を含めるWORLD

夏時間ディレクトリ/TEST

TEST02TEST03ファイルを/TESTフォルダに移動したいですTEST02.txtTEST03.txt

次のようにコマンドを入力します。

cd /Vinodh
grep -l 'WORLD' *TEST*
mv TEST02 /TEST
mv TEST03 /TEST
cd /TEST
mv TEST02 TEST02.txt
mv TEST03 TEST03.txt

これらすべてを1行の文にまとめるか、バッチファイルを使用してすべてのファイルを一度にコピーしたいと思います。

ベストアンサー1

GNUツールの使用:

grep -D skip -d skip -lZ WORD /Vinodh/*TEST* | xargs -r0 mv -vt /TEST

これらのファイルの一部がシンボリックリンクの場合、そのファイルを移動するとリンクが失われる可能性があります。

GNUはgrepデバイス/ fifosスキップを使用でき、-D skipディレクトリスキップを使用できますが、-d skipシンボリックリンクをスキップするオプションはありません。 glob このファイルタイプを指定できるシェルが必要ですzsh。たとえば、次のようになります。

grep -lZ WORD /Vinodh/*TEST*(.) | xargs -r0 mv -vt /TEST

ただ見て定期的な文書。

別の方法は、次のものを使用することですfind

LC_ALL=C find /Vinodh/. ! -name . -prune \
  ! -name '.*' -type f -name '*TEST*' -exec grep -lZ WORD {} + |
  xargs -r0 mv -t /TEST

GNUツールがない場合はPOSIXバリアントがあります。

LC_ALL=C find /Vinodh/. ! -name . -prune \
  ! -name '.*' -type f -name '*TEST*' -exec grep -q {} \; \
  -exec mv {} /TEST/ \;

おすすめ記事