ls egrepまたは「egrep」対「find」を使用してファイルを識別して移動する方法

ls egrepまたは「egrep」対「find」を使用してファイルを識別して移動する方法

特定のファイル名文字列を含むすべてのイメージを特定のディレクトリに移動する必要があります。

例ファイル名です。

facility_92+SOURCE1+SOURCE1.0

"facility_"の後に1〜5桁の数字が続くことがあります。

以下は移動したいファイルのリストを返します。

ls | egrep "facility_([0-9]*)\+SOURCE[0-9]*"

ただし、返された項目を移動しようとすると詰まります。検索を使用して、一致するファイルを移動したフォルダに移動しました。

for f in 'find ./ | ls | egrep "facility_([0-9]*)\+SOURCE[0-9]*"'; do mv $f moved/; done

しかし、mvが条件を文字列に解析すると、多くのエラーが発生します。

"-exec"を再試行しました。

find ./ | ls | egrep "facility_([0-9]*)\+SOURCE[0-9]*" -exec mv moved 

しかし、同様のエラーが発生します...

ご提案いただきありがとうございます。このアプローチを試したことが間違っていますか? Findで同じ正規表現を実行する方法を知る必要がありますか?

答え1

そしてfindあなたはする必要がありますいいえパイプを介してコマンドを接続します。

-regexファイル名と一致する文字列を渡すための素晴らしいフラグがあります。

find . -regextype egrep -regex ".*facility_([0-9]*)\+SOURCE[0-9]*.*" -exec mv {} DIRECTORY \;

最後に\;一致する各ファイル名を代替ファイルmv{}

ご覧のとおり、正規表現.*の始めと終わりに使用する必要があります。findみんな跡:

-regex pattern
       File name matches regular expression pattern.  This is a match on the whole path, not a search. For  example, to  match  a  file named './fubar3', you can use the regular expression '.*bar.' or '.*b.*3', but not 'f.*r3'.

関連情報