ディレクトリのファイル名からGETパラメータを削除する

ディレクトリのファイル名からGETパラメータを削除する

?など、いくつかの名前から選択する必要がありますimage.jpg?foo=bar&bar=foo。誰かがどのように行われているか教えてもらえますか?

何らかの理由で、次のコマンドは機能しません。

rename "\?." "" *
rename 's/(.*)\.jpg\?.*/$1\.jpg/' *

答え1

これはとても簡単です。

名前に " "を含む各ファイルに対してforループを実行しています?

この for ループは、mvこれらすべてのファイルに対して (== 名前変更) コマンドを呼び出します。追加するこのファイル名には次の部分がありません?

正確なコマンドは次のとおりです。

for i in *\?*;do mv -vf "${i}" "${i%%\?*}";done

これは少し秘密に見えるかもしれませんが、これは次の意味です。 「i」という変数は、"${i%%\?*}"尾から「」?の後ろのすべての項目を削除します。

少し不思議なことがまたありますが、それは部分です*\?*?名前に ""を含む現在のディレクトリのすべてのファイルを示します。これは(win)do(w)sと同じパターンです。唯一の違いは、「?」は基本的にすべての文字を意味することです。バックスラッシュ( ' \')は、この特別な意味を取り除くために使用されます。

関連情報