而不是使用`cmd`
,$(cmd)
是新的風格,如果可能的話,應使用更清晰,可也嵌套。但我不會使用。
您遇到的問題是,我懷疑,跟你的mkdir,這就要求所有的頂級目錄存在創造了基礎,即
mkdir /tmp/path/here
需要的/ tmp /路徑存在的,除非之前您使用-p標誌,該標誌創建整個樹,而不管當前存在什麼。
另一個你會發現的問題是隱藏的文件和目錄將被創建爲文件和非隱藏文件和目錄將被創建爲目錄,而不管原始目錄中的文件的類型。
更好的方法是使用find。例如
dir=/mnt/TV
dummy_dir=/home/bob/Desktop/dummy
find $dir -type d -printf '%P\n' | \
while read dir; do
[[ -d "$dummy_dir/$dir" ]] || mkdir -p "$dummy_dir/$dir"
done
find $dir -type f -printf '%P\n' | \
while read file; do
[[ -f "$dummy_dir/$file" ]] || touch "$dummy_dir/$file"
done
第一個find命令將打印出與$ dir子目錄中所有目錄的$ dir相關的路徑。然後將它們傳送到while循環中,該循環測試dummy_dir中是否存在該目錄,如果不存在,則創建該目錄。
第二個find命令將對文件執行相同操作。
注意:這將完全忽略sym鏈接套接字或任何其他不是目錄或常規文件的文件。
如果這不符合您的要求,請更新您的問題以包含更多詳細信息。
你能比「它不能正常工作」更具體嗎? – kmkaplan
我猜「ls $ dir」的輸出不是你期望的結果。檢查你的別名? – jpmuc