Filenames

從目錄中的文件名中刪除 GET 參數

  • August 4, 2014

我需要?從一堆文件中刪除以image.jpg?foo=bar&bar=foo. 有人可以告訴我它是如何完成的嗎?

這些命令由於某種原因不起作用:

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

這很簡單:

我們正在對每個名稱包含“ ?”的文件進行 for 循環。

這個 for 循環呼叫一個mv(== rename) 命令,其中包含所有這些文件,加上這些文件名,沒有它們在 ’ ?’ 之後的部分。

確切的命令如下:

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

這似乎有點神秘,是"${i%%\?*}". 這意味著:“名為‘i’的變數,從它的尾部刪除了‘ ?’之後的所有內容。

還有一點神秘的東西,就是那個部分*\?*。它表示目前目錄中的每個文件,其名稱包含一個’ ?’。這是一個模式,就像在 (win)do(w)s 中一樣,唯一的區別是 ’ ?’ 預設情況下表示每個字元。反斜杠 (’ \’) 用於從中刪除此特殊含義。

引用自:https://unix.stackexchange.com/questions/148235