我對材料不太深入,很少使用 Bash 腳本。即使進行了一些研究,我也無法快速了解 Bash 中的所有內容,以便我可以在整個目錄及其子目錄中搜索檔案,然后輸出它們的型別。我現在已經對函式的方向有了一些了解,但又不太知道如何遞回地執行此操作。另外,我只想考慮檔案而不考慮檔案夾。這是我自己已經完成的事情:
for item in "$1"/*
do
if ! [ -d $item ]; then
echo $(file $item)
fi
done;
因此,當呼叫腳本時,路徑作為引數傳遞。然后在路徑中搜索非目錄,并將其型別與命令檔案一起輸出。但是這個遞回又是如何實作子目錄的呢?我也通過迭代 ls -R 進行了嘗試,但是檔案夾的名稱仍然被附加,我無法再通過我的方式檢查它是檔案夾還是檔案。編輯:我不能使用查找!
我很高興有任何幫助!
uj5u.com熱心網友回復:
您可以使用 bash 擴展的通配功能:
$ shopt -s dotglob globstar
$ for i in **/*; do [ -d "$i" ] && continue; file "$i"; done
uj5u.com熱心網友回復:
這可能會有所幫助: 如何在不使用“find”或“ls”命令的情況下遞回列出 Bash 中的子目錄?
也就是說,我對其進行了修改以接受用戶輸入,如下所示:
#!/bin/bash
recurse() {
for i in "$1"/*;do
if [ -d "$i" ];then
echo "dir: $i"
recurse "$i"
elif [ -f "$i" ]; then
echo "file: $i"
fi
done
}
recurse $1
如果您不想要檔案部分(看起來您不想要),那么只需洗掉 elif 和它下面的行。我把它留在原來的帖子里也有。希望這可以幫助。
uj5u.com熱心網友回復:
建議
file $(find -type f 2>/dev/null)
解釋:
find遞回搜索到當前檔案夾的命令。僅過濾來自
find命令的檔案:-type f.忽略任何
find權限/訪問錯誤2>/dev/nullfile在每個找到的檔案上運行命令。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/464140.html
上一篇:為檔案夾中的每個影像生成縮略圖
下一篇:字串中的外殼更改日期
