題 Unix:檢查文件是否是文件夾


所以我需要遍歷一個目錄樹,目前我可以打印目錄中的所有文件,但是一旦完成,我需要能夠進入起始目錄的子文件夾,依此類推。我的程序打印文件和文件夾作為開始,但我需要檢查每個文件以確保它是一個目錄,然後輸入它。有人可以提供一些指導嗎?


3
2017-09-28 12:44


起源




答案:


help test 產量

測試:測試[expr]

[...]

-d FILE如果file是目錄,則為True。

[...]

退出狀態:   如果EXPR計算結果為true,則返回成功;如果EXPR計算結果為false或者給出了無效參數,則失敗。

test 可以縮寫 [所以你可以做到

if [ -d "$file" ]; then
    # do stuff
fi

11
2017-09-28 12:49





test -d myFileOrFolder

但你所描述的看起來像是的行為 find


2
2017-09-28 12:46





從輸入的註釋到一些響應,我猜你想在每個目錄中運行一些腳本。在這種情況下,可能的方法之一是使用 find 同 exec 選項如下:

find ./ -type d -exec sh -c "cd {} && <your_script_with_absolute_path>" \;

例如,在當前目錄中有一個腳本 test.sh 然後你想在當前目錄的每個子目錄中執行它

find ./ -type d -exec sh -c "cd {} && `pwd`/test.sh" \;

到了 find 命令 -type d 將要求查找路徑中的所有目錄 ./ 作為第一個參數傳遞。 -exec 在這種情況下,將為每個這樣的查找執行命令 sh -c 這是創建一個shell並執行帶引號的命令, {} 表示找到的參數 find 命令。
希望這可以幫助!


1
2017-09-28 14:38





使用 -d 運算符來測試目錄的存在:

if [ -d "$DIR" ]; then
    ...
fi

0
2017-09-28 12:46



好的,這是有道理的,然後我將如何進入該目錄並再次運行腳本?


偽代碼:

[ -d your_filename ] && it's a folder ...

0
2017-09-28 12:46



那麼我將如何進入新目錄,然後再次調用我的腳本?


find . -type d

這會找到所有子目錄


0
2017-09-28 12:48



那麼我將如何進入新目錄,然後再次調用我的腳本?
有一個 -execdir 選項和其他一些選項,具體取決於您的版本 find。您也可以將此管道傳輸到顯式訪問每個目錄的while循環。 - Foo Bah


根據一些評論,我猜你實際上並不想打印目錄,而是處理目錄樹中的所有常規文件(包括所有子目錄)。如果是這種情況,你可能想看看 exec 找到的選項。

從內存中,你可能想要這樣的東西(使用 cat 命令代表你的腳本):

find . -type f -exec cat {} \;

在這個例子中,所有的 非目錄 整個樹中的文件(遞歸地)將被處理 cat (按標準打印)。


0
2017-09-28 13:09