Find
使用 find 命令將文件重命名為不帶副檔名的相同文件名
我想將一組文件重命名為相同的文件名但沒有副檔名。它們分散在我的主目錄中,我不知道它們的確切位置,但我知道要刪除的副檔名。
我需要一個且只有一個命令來執行此任務。
這是部分命令:
$ find ~/ -type f -name "*.hhs" -exec mv {} <I DO NOT KNOW> \;
在哪裡
<I DO NOT KNOW>
被你的建議取代。例如,我嘗試將其替換為以下內容:`basename {} .hhs`
它對我不起作用。
例子
如果找到文件
file1.jpg.hhs
和file2.jpg.hhs
,我希望將它們重命名如下:file1.jpg
和file2.jpg
如果您擁有或可以安裝 PERL 擴展,
rename
(apt-get install rename
在基於 Debian 的發行版上)…find ~ -type f -name "*.hhs" -exec rename -d ".hhs" {} +
選項,
-d
或--delete
刪除指定的字元串。
您需要一個可以
.hhs
從文件名中刪除文件名後綴的工具。find
不能為您執行此操作,因此您必須通過以下方式呼叫另一個實用程序-exec
:find "$HOME" -type f -name '*.hhs' -exec sh -c ' for pathname do cp -i "$pathname" "${pathname%.hhs}" done' sh {} +
我沒有
basename
在這裡使用,因為這也會從找到的路徑名中刪除目錄路徑(可以使用 再次插入dirname
,但會產生混亂的程式碼)。相反,我使用盡可能多的找到的路徑名呼叫內聯 shell 腳本,並讓腳本循環遍歷這些路徑名,複製各個文件。新名稱是使用標準參數替換構造的,該替換
.hhs
從 的值末尾刪除字元串$pathname
。有關的: