私のSRCフォルダにはたくさんのファイルがあります。特定のパターンに従うすべてのファイルをこのSRCフォルダから別のDSTフォルダに移動し、ファイル名を目的の拡張子に変更したいと思います。
例パラメータ
SRCディレクトリ/Vinodh
フォルダ内のファイルに/Vinodh
はTEST01
、、、、TEST02
TEST03
TEST04
TEST02
&TEST03
単語を含めるWORLD
夏時間ディレクトリ/TEST
TEST02
&TEST03
ファイルを/TEST
フォルダに移動したいですTEST02.txt
。TEST03.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/ \;