Ls

如何製作一個 for 循環來讀取帶有空格的目錄名稱?

  • August 2, 2022

我需要創建一個腳本來掃描目錄中的文件夾並獲取每個文件夾的名稱,製作一個 .txt 文件,用文件夾的名稱命名並放入該文件夾中。

例如:一個目錄中有 3 個文件夾,分別命名為“1”、“2”和“3”我想在每個文件夾中創建一個 .txt 文件,以該文件夾的名稱命名,以便文件夾 1 具有“1.txt”在它的文件夾 2 中有“2.txt”等等。

我設法用這個腳本做到了這一點:

for i in $(ls -d */); do touch "$i $(basename $i).txt" ; done

問題是我想做同樣的事情,但文件夾名稱中有空格。例如:如果我有一個名為“Test Me”的文件夾,它將給出一個錯誤,如下所示:

Me: no directory with that name

它只會看到“我”這個詞,並將其視為一個文件夾,而不是“測試我”作為一個整體。

我怎樣才能做到這一點 ?

更新 這是解決方案,TAAPSogeking 在下面評論(再次感謝他) for dir in *; do [ -d "$dir" ] && touch "$dir/$dir.txt"; done

假設您只想要立即的目錄而不是所有嵌套的子目錄。以下假設您目前位於相同的目錄和要循環的目錄中

for dir in *; do 
   [ -d "$dir" ] && touch "$dir/$dir.txt"; 
done
  1. 這將遍歷目前目錄中的每個文件
  2. 過濾目錄
  3. 然後在指定的director中創建請求的文件

此外,您可能對shellcheck感興趣,它指出了常見的錯誤/不良做法(例如在這種情況下使用 ls )

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