for i in `ls -lrt|grep ^d|cut -d ' ' -f 13-`
do
cd $i
ls
cd ../
done
在上面的例子中,我期待腳本進入每個目錄,填充該目錄的所有文件,從它出來,然後進入其他目錄並打印它的內容。請在這裏建議最新的錯誤。Shell腳本沒有給出正確的輸出
for i in `ls -lrt|grep ^d|cut -d ' ' -f 13-`
do
cd $i
ls
cd ../
done
在上面的例子中,我期待腳本進入每個目錄,填充該目錄的所有文件,從它出來,然後進入其他目錄並打印它的內容。請在這裏建議最新的錯誤。Shell腳本沒有給出正確的輸出
執行以下操作之一是否在執行您正在查找的任務?
ls *
ls * -r
因爲有可變數目的每個場之間的空間在Ls -ltr輸出,由於LS格式化和可變長度的文本字段的反覆無常cut命令不能正常工作。解析文件名了LS目錄列表的更可靠的方法是替換AWK剪切命令「{打印$ 9}」,所以for循環應該是這樣的:
for i in `ls -lrt|grep ^d| awk '{print $9}'`
awk是這樣的事情最好.. – doniyor
請檢查字段13是所需字段,它是ls命令輸出的最後一個字段。在我的系統中,它是第九個領域。所以通過我將您的代碼更改爲,
for i in `ls -lrt|grep ^d|cut -d ' ' -f9`
do
echo "Directory -$i"
cd $i
ls
cd ../
done
它在此更改後正常工作。
你也可以使用其他命令來執行它,比如sed,awk。我用awk做了它,但不是硬編碼的任何字段值(使用內部變量NF - 字段數,以獲取最後一個字段,它應該是目錄的名稱)。
#for i in `ls -lrt|grep ^d|cut -d ' ' -f9`
for i in `ls -lrt|grep ^d|awk '{print $NF}'`
do
echo "Directory -$i"
cd $i
ls
cd ../
done
這也工作得很好。
絕對不要對「ls
中的文件」做任何變化,因爲它的名稱中包含空格的文件將失敗。所有你需要的是:
find . -print
,如果你想要做的事,在當前目錄下的每個文件,那麼它只是
for file in *
do
printf "Working on %s\n" "$file"
<do stuff with "$file">
done
或所有子目錄太然後使用xargs的還是:
find . -print |
while IFS= read -r file
do
printf "Working on %s\n" "$file"
<do stuff with "$file">
done
雖然後者與任何基於管道的解決方案一樣,將會因其名稱中帶有換行符的文件而失敗。
遍歷只在當前目錄下的目錄,使用該模式*/
,所以
for dir in */; do
cd "$dir"
do stuff
cd ..
done
爲什麼不只是'爲F *;如果[-d「$ f」];那麼ls「$ f」;網絡連接;完成' – Amber
你看到的輸出是什麼?在循環中添加echo $ i,並檢查ls命令是否正確。 – SidJ
它進入一個目錄我猜第一個,然後它無法進入其他目錄和輸出說ca'nt cd到(目錄名稱) – Kunal