特定のファイル名文字列を含むすべてのイメージを特定のディレクトリに移動する必要があります。
例ファイル名です。
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'.