我想在每個文件夾中創建文件。這是我的命令for i in `ls`;do cd $i;touch test.txt;done-bash: cd: 10/: No such file or directory-bash: cd: 2/: No such file or directory-bash: cd: 3/: No such file or directory-bash: cd: 4/: No such file or directory-bash: cd: 5/: No such file or directory-bash: cd: 6/: No such file or directory-bash: cd: 7/: No such file or directory-bash: cd: 8/: No such file or directory-bash: cd: 9/: No such file or directory它僅test.txt在文件夾中生成1/,其余文件夾為空白。我認為原因是我的命令缺乏{ }澄清LOOP的規模。你能幫我更新我的命令嗎?
3 回答

白豬掌柜的
TA貢獻1893條經驗 獲得超10個贊
for dir in */; do touch "$dir/test.txt" done
無需
cd
進入目錄即可在其中創建文件。不要解析的輸出
ls
。的輸出ls
僅用于查看。如果文件或目錄的名稱包含文字換行符或空格,則解析將中斷。該模式
*/
將匹配當前目錄中的任何目錄。引用您的變量擴展。如果將代碼
IFS
設置為數字,則代碼將中斷。
如果您確實需要對cd
目錄執行a操作,請在子shell中進行操作。更改后的工作目錄僅影響子外殼,因此無需cd
備份。
for dir in */; do ( cd "$dir" && touch test.txt ) done

湖上湖
TA貢獻2003條經驗 獲得超2個贊
您cd
進入目錄,但是您不cd
退出。假設列表中的第一個目錄是1
,您的腳本首先更改為1
,然后嘗試將其更改為1/10
,該腳本不存在。
您可以cd -
在觸摸文件后執行“ a ”操作。
更好的是,您cd
完全避免使用,touch $i/test.txt
而是改為執行。
當然,編寫的腳本不是很健壯:如果當前目錄包含純文件,則腳本將中斷;如果包含名稱中帶有空格的條目,則腳本將中斷-但這是另一個問題。
- 3 回答
- 0 關注
- 439 瀏覽
添加回答
舉報
0/150
提交
取消