Bash
列出帶有空格的文件夾的循環
方法
我有一個隨機命名文件夾的目錄,帶有空格和句點。
我創建了一個小循環(在腳本中),目的是重命名這些文件夾。基於這些是我的目錄(test 和 empty):
$ ls -la ./ ../ 35._JK_io/ '43A. io kl_ -'/ 'Mi.Nombre.es Adios'/
注意:我們已嘗試 (creo) 列出所有可能性,並在區分目錄和文件夾時起作用。
現在,我繼續創建一個循環,以便僅列出目錄並(將來)重命名它們:
for archives in `sh -c 'ls -q */' sh` do echo "$archives" done
問題
問題是當我執行腳本時,我得到:
35._JK_io/: 43A. io kl_ -/: Mi.Nombre.es Adios/:
問題
如何防止這種情況發生在我身上並以空格和僅三個文件的形式出現?
觀察
在它獲得的文件夾上執行其他腳本時,這
35._JK_io /
是一個目錄,但其他兩個不是謝謝!!
在遍歷目錄時,尤其是當這些目錄具有時髦的名稱時,不要遍歷
ls
. 通常,在程序之間傳遞路徑名需要非常小心,因為 Unix 文件名可能包含除/
nul 字元 (\0
) 之外的任何字元。反而
for dirname in ./*/; do printf 'Directory name is "%s"\n' "$dirname" done
/
模式中的最後一項./*/
使模式僅擴展到目錄。執行此操作時,該dirname
變數將獲得類似的值./some directory name/
。我包括./
在模式的開頭,但如果你願意,你可以刪除它。請注意,如果您的目錄-
名稱中的第一個字元是破折號 ( ),那麼您稍後將不得不使用 egmv -- "$dirname" "$newname"
(帶有--
) 來停止mv
將名稱中的破折號解釋為命令行選項。在./
的開頭$dirname
,--
不需要 。引用變數擴展非常重要,否則 shell 會在值上進行分詞和文件名通配。
有關的: