Find

使用 find 命令將文件重命名為不帶副檔名的相同文件名

  • November 28, 2018

我想將一組文件重命名為相同的文件名但沒有副檔名。它們分散在我的主目錄中,我不知道它們的確切位置,但我知道要刪除的副檔名。

我需要一個且只有一個命令來執行此任務。

這是部分命令:

$ find ~/ -type f -name "*.hhs" -exec mv {} <I DO NOT KNOW> \;

在哪裡<I DO NOT KNOW>被你的建議取代。例如,我嘗試將其替換為以下內容:

`basename {} .hhs`

它對我不起作用。


例子

如果找到文件file1.jpg.hhsfile2.jpg.hhs,我希望將它們重命名如下:file1.jpgfile2.jpg

如果您擁有或可以安裝 PERL 擴展,renameapt-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

有關的:

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