我有以下代碼,它創建一個數組並遍歷一個目錄,並在數組的每個元素下創建一個子目錄。Bash腳本迭代目錄和創建子目錄
#!/bin/bash
cd /var/www
dirs=$(find * -maxdepth 0 -type d)
for dir in "${dirs[@]}"; do
echo $dir
mkdir $dir/backups
done
雖然它回顯所有的目錄,但它只在數組的最後一個元素上創建一個目錄。可能是什麼問題?
我有以下代碼,它創建一個數組並遍歷一個目錄,並在數組的每個元素下創建一個子目錄。Bash腳本迭代目錄和創建子目錄
#!/bin/bash
cd /var/www
dirs=$(find * -maxdepth 0 -type d)
for dir in "${dirs[@]}"; do
echo $dir
mkdir $dir/backups
done
雖然它回顯所有的目錄,但它只在數組的最後一個元素上創建一個目錄。可能是什麼問題?
問題的數組初始化 - 將其更改爲:
dirs=($(find * -maxdepth 0 -type d))
然而,上述說法是有問題的,如果你有一個對他們有空格的目錄。
您可以使用一個簡單的水珠而不是 - 它處理空格太:
cd /var/www
dirs=(*/)
for dir in "${dirs[@]}"; do
: your code
done
如果你是bash的4.4尤其是,你可以使用readarray功能類似波紋管。還使用-maxdepth 0似乎不是一個好的選擇 - 你可能需要使用-maxdepth 1
#!/bin/bash
cd /var/www
readarray -t -d'' dirs < <$(find . -maxdepth 1 -type d -print0)
for dir in "${dirs[@]}"; do
echo $dir
mkdir $dir/backups
done
,但如果你可以做這件事只是發現和的mkdir -v(詳細):
$ find . -maxdepth 1 -type d -name 'a*'
./appsfiles
$ find . -maxdepth 1 -type d -name 'a*' -exec mkdir -v {}/backup \;
mkdir: created directory './appsfiles/backup'
使用mkdir -v可以從mkdir獲得詳細消息,並且可以跳過回顯。
如果您需要回聲無論如何,你可以不喜歡它:
$ find . -maxdepth 1 -type d -name 'a*' -exec bash -c 'echo $0 && mkdir -v $0/backup' {} \;
./appsfiles
mkdir: created directory './appsfiles/backup'
包括您find命令的輸出。看到這個帖子:http://unix.stackexchange.com/questions/162411/find-maxdepth-0-not-returning-me-any-output – codeforester