Filenames
從目錄中的文件名中刪除 GET 參數
我需要
?
從一堆文件中刪除以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 中一樣,唯一的區別是 ’?
’ 預設情況下表示每個字元。反斜杠 (’\
’) 用於從中刪除此特殊含義。