?
など、いくつかの名前から選択する必要があります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と同じパターンです。唯一の違いは、「?
」は基本的にすべての文字を意味することです。バックスラッシュ( ' \
')は、この特別な意味を取り除くために使用されます。