Bash
遍歷名稱中帶有空格的目錄
我正在嘗試編寫一個循環遍歷目錄的腳本,並重命名子目錄中的文件以匹配目錄名稱。我遇到了一個問題,如果一個目錄的名稱中有空格,那麼該名稱就會被拆分,我無法像我需要的那樣對它做任何事情。
例如,文件夾結構為:
TopLevel ->this is a test -->test.txt
到目前為止,我的腳本是:
#!/bin/sh topLevel="/dir1/dir2/TopLevel" for dir in $(ls $topLevel) do echo $dir # for testing purposes to make sure i'm getting the right thing # Get name of directory - i know how to do this # Rename file to match the name of the directory, with the existing extension - i know how to do this done
我的預期輸出是
/dir1/dir2/TopLevel/this is a test
但是,實際輸出是
this is a test
有人可以指出我正確的方向嗎?自從我完成 shell 腳本以來已經有一段時間了。我正在嘗試一次完成這個腳本,但我似乎一直在堅持下去。
這是您永遠不應嘗試解析
ls
. 如果你只使用 shell glob,你可以這樣做:for dir in /dir1/dir2/TopLevel/*/ do echo "$dir" ## note the quotes, those are essential done
註釋
- 請注意我如何使用
for dir in /dir1/dir2/TopLevel/*/
而不僅僅是for dir in /dir1/dir2/TopLevel/*
. 這是僅迭代目錄。如果您想要目錄和文件,請使用for f in /dir1/dir2/TopLevel/*
.- 引號
$dir
是必不可少的,您應該始終引用變數,特別是如果它們包含空格。進一步閱讀: