假設我有一些目錄,其中包含大量的子目錄,並在每個這些子目錄中的我要創建具有相同名稱的目錄:創建一個子目錄中的文件夾中的所有目錄
./dir-1
./dir-2
...
./dir-n
我想要做mkdir */new-dir
但是這會引發錯誤。這是怎麼回事?
假設我有一些目錄,其中包含大量的子目錄,並在每個這些子目錄中的我要創建具有相同名稱的目錄:創建一個子目錄中的文件夾中的所有目錄
./dir-1
./dir-2
...
./dir-n
我想要做mkdir */new-dir
但是這會引發錯誤。這是怎麼回事?
for dir in $(ls); do
mkdir "$dir/new-dir"
done
find . -type d | xargs -I "{x}" mkdir "{x}"/new-dir
如果你想將其降低到目錄的第一級使用
find . -maxdepth 1 -type d | xargs -I "{x}" mkdir "{x}"/new-dir
不如只列出目錄,否則你可能會得到一堆錯誤,當它遇到一個文件,而不是目錄的
for dir in $(ls -d */); do mkdir "$dir/2015" done
驚人的,這個問題從來沒有Ø btained一個理智的答案:
shopt -s nullglob
for i in */; do
mkdir -- "${i}newdir"
done
shopt -s nullglob
這樣,如果沒有匹配項,glob會擴展爲無。--
mkdir
標記選項結束(如果有一個名稱以連字符開頭的目錄,不會混淆mkdir
試圖解釋它作爲一個選項)。這會靜靜地忽略隱藏的目錄。如果您需要在隱藏的目錄執行此操作,只需通過以下替換行shopt -s nullglob
:
shopt -s nullglob dotglob
的dotglob
從而使水珠也考慮隱藏的文件/目錄。
如果你想的mkdir
只有一個調用:
shopt -s nullglob
dirs=(*/)
mkdir -- "${dirs[@]/%/newdir}"
令人驚訝,我也得到了downvoted!憤怒的downvoters,請留下一張紙條,謝謝。 –
請不要解析ls'的'輸出。謝謝。 –