Files

如何在保持文件副檔名的同時將目錄中的文件重命名為各自的目錄名稱?

  • November 25, 2020

我在目前目錄中有一堆不同名稱的目錄:

Hello World/
Dr. Dre - Still Dre/
Angry Birds/
2018 Grand Prix Race Highlights/

在這些目錄中的每一個中都有文件(分別在每個目錄中):

source.c
song.aac
setup.apk
spanish.mp4

我想將每個文件重命名為它們的目錄名,但副檔名不應該改變。範例輸出文件:

Hello World.c
Dr. Dre - Still Dre.aac
Angry Birds.apk
2018 Grand Prix Race Highlights.mp4

輸出位置無關緊要。

我找到了很多解決方案來重命名目前目錄中使用的文件for file in *mv "$file" "${file/oldname/newname}"但是我的文件位於 1 級深的子目錄中,所以我目前擁有的是:

currdir=$(pwd)
for dir in */
do
 cd ${dir}
 file=$(echo *)
 ext=${file##*.}
 mv "*" "${dir}.${ext}"
 cd ${currdir}
done

我正在使用 zsh ,當我嘗試執行此功能時,我得到zsh: source.c not found了我懷疑該行可能有問題的資訊file=$(echo *)。我也不喜歡我在那裡所做的事情的複雜性,所以也許有一種更清潔的方法,甚至是單線。我只想使用已經在 Ubuntu 中預設安裝的命令,例如mv, find, sed, vim,grep等。目錄名稱可能有符號字元,例如$, &,.等,所以請同時適應奇怪的名稱。

我只是這樣做:

autoload zmv
zmv '(*)/(*)(.*)' '$1$3'

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