Bashスクリプトを使用してgrepにファイルを移動して名前を変更する方法

Bashスクリプトを使用してgrepにファイルを移動して名前を変更する方法

こんにちは。私は、次の転送されたファイルを受け取る入力というFTPフォルダを持っています。

"Guide to Iceland _ Chen-ping Wang itinerary T-987654987.pdf"
"Guide to Iceland _ T-123654875 Chen-ping Wang itinerary.pdf"

デフォルトでは、ファイルの説明はさまざまですが、常に「T-」といくつかの数字が含まれています。

ファイルを../Outputフォルダにコピーし、「T-」と数字が最初に表示され、残りのファイル名が表示されるようにファイル名を変更するbashスクリプトを作成する必要があります。例:"T-123654875 - Guide to Iceland _ Chen-ping Wang itinerary.pdf"

正確な名前を得るためにGrepを使用します。検索(.+)(T-\d+)して次に置き換える$2 - $1

しかし、正しく動作させることはできません。

答え1

grep単独で交換することは私に利用可能な組み合わせのようには見えません。これについてどう思いますかsed

$ ls *pdf
Guide to Iceland _ Chen-ping Wang itinerary T-987654987.pdf
Guide to Iceland _ T-123654875 Chen-ping Wang itinerary.pdf

その後、いくつかのforループがありますbash

$ for i in *pdf; do mv "$i" "$( echo $i |  sed -r  's/^(.*)(T-[0-9]{9})(.+)$/\2 - \1\3/'  )"; done

これは現在のディレクトリのすべてのPDFを繰り返し、名前を保存し$i、sedを介してコンテンツをエコーし​​ます(そしてその出力をターゲットとして使用mv)。sedファイル名を3つの部分に分けて並べ替えます。テストのmvために交換することをお勧めしますecho mv:)

これは私たちに以下を提供します。

$ ls *pdf
T-123654875 - Guide to Iceland _  Chen-ping Wang itinerary.pdf
T-987654987 - Guide to Iceland _ Chen-ping Wang itinerary .pdf

関連情報