Rename
如何從目錄名稱中刪除輸入?
我在 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 和衍生產品的使用者:更改
rename
為rename.ul
,或更改rename $'\r' ''
為rename 's/\r//'
。)或者,使用 zsh 的
zmv
功能:zmv $'**/*\r' "${f%?}"