Bash

如何使用 bash 檢索目錄中的文件夾名稱

  • October 19, 2020

我正在嘗試獲取另一個文件夾中的文件夾名稱。我試圖使用下面的程式碼,但問題是它返回文件夾的完整地址,而不僅僅是文件夾名稱

for folder in /[my folder]/*; do cat $folder;  done

有了這個,我得到/[my folder]/subfolder1了,我所期望的只是subfolder1.

謝謝

cat是一個簡單地獲取其輸入流或文件並將其列印到標準輸出的程序。你不能cat一個目錄,那沒有意義。如果您只想查看給定目錄的所有第一級子目錄的名稱,您可以使用echowhich 簡單地列印您給它的內容:

$ for dir in foo/*/; do echo "$dir"; done
foo/dir1/
foo/dir2/
foo/dir3/
foo/dir4/

你甚至不需要循環:

$ echo foo/*/
foo/dir1/ foo/dir2/ foo/dir3/ foo/dir4 

要僅獲取目錄名稱,而不獲取路徑:

$ for dir in foo/*/; do basename "$dir"; done
dir1
dir2
dir3
dir4

或者,您可以cd到路徑:

$ cd foo
$ echo */
dir1/ dir2/ dir3/ dir4/

或者cd在一個子shell中,這樣當命令完成時你就留在原來的位置:

$ ( cd foo && echo */ )
dir1/ dir2/ dir3/ dir4/

或者,將它們放在單獨的行上,並確保即使在奇怪的目錄名稱(例如,包含換行符的名稱)上也能正常工作:

   $ ( cd foo && printf -- '%s\n' */ ) 
   dir1/
   dir2/
   dir3/
   dir4/
   

最後,如果您的目錄名稱可能包含換行符或其他奇怪的內容,請使用:

引用自:https://unix.stackexchange.com/questions/614917