Rename

如何從目錄名稱中刪除輸入?

  • July 4, 2017

我在 Excel 中創建了一個文件,並將該文件通過 ftp 傳輸到我的 Linux 機器上。文件中有一堆mkdir命令。現在所有新創建的目錄的末尾都有一個輸入符。我可以使用以下命令找到目錄:

find . -type d -name *$'\r'

但是當我嘗試使用此命令刪除它們時:

find . -type d -name *$'\r' | xargs rm-rf

它不起作用 - 沒有任何東西被刪除。目錄仍然存在,並且它們仍然帶有輸入符。

你能幫我創建一個命令來刪除那些討厭的 ‘\r’s 嗎?謝謝。

PS 我正在使用 RHEL 5.3

sed編輯:忘記在行中雙重轉義 \r

這些中的任何一個都應該適合你

for i in $(find . -type d -name '*\r'); do mv "$i" "$(echo $i | sed -e 's/\\r//g')"; done

find . -type d -name '*\r' -exec mv "{}" "$(echo {} | sed -e 's/\\r//g')" \;

這將在您目前目錄下找到所有名為 *$\r 的目錄

然後它會將mv它們(重命名)為相同的名稱減去 \r

Linux 的rename命令使這很容易:

rename $'\r' '' *

這會將目前目錄中所有文件名中的第一個也是唯一的輸入符 ( $'\r') 替換為空字元串 ( )。''不包含輸入的名稱保持不變(或者您可以寫入rename $'\r' '' *$'\r'僅考慮必須重命名的文件)。

如果您還需要對子目錄中的文件進行操作:

shopt -s globstar
rename $'\r' '' **/*$'\r'

(Debian、Ubuntu 和衍生產品的使用者:更改renamerename.ul,或更改rename $'\r' ''rename 's/\r//'。)

或者,使用 zsh 的zmv功能:

zmv $'**/*\r' "${f%?}"

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