Bash

bash 可以根據文件名創建文件夾,然後將文件移動到文件夾中嗎?

  • November 15, 2021

在 /Desktop/a/ 上,有一組文件:

DSCN1840.AVI00001.png
DSCN1840.AVI00002.png
DSCN1840.AVI00003.png
DSCN1841.AVI00001.png

我想要的是具有以下結構:

Desktop/a/DSCN1840/

 DSCN1840.AVI00001.png

 DSCN1840.AVI00002.png

 DSCN1840.AVI00003.png

Desktop/a/DSCN1841/

 DSCN1841.AVI00001.png

作為一次性步驟,您可以遍歷所有文件並收集所需的子目錄名稱;如果該子目錄尚不存在,請創建它;然後將該文件移動到該子目錄中:

for f in *.png
do
 subdir=${f%%.*}
 [ ! -d "$subdir" ] && mkdir -- "$subdir"
 mv -- "$f" "$subdir"
done

其中的關鍵部分是參數擴展 in ${f%%.*},它表示刪除%%一個句點後跟任何內容的最長匹配部分 ( ),這有效地去除了例如.AVI00003.png文件名的部分,只留下前導目錄指示符。

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