Bashを使用してディレクトリからフォルダ名を取得する方法

Bashを使用してディレクトリからフォルダ名を取得する方法

別のフォルダ内のフォルダの名前を取得しようとしています。以下のコードを使用しようとしましたが、問題はフォルダ名だけでなくフォルダの完全なアドレスを返すことです。

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

これで私は/[my folder]/subfolder1私が期待したものが正確に何であるかを理解しますsubfolder1

ありがとう

答え1

cat単に入力ストリームまたはファイルを取り込み、標準出力として印刷するプログラムです。ディレクトリは使用できませんcat。これは意味がありません。特定のディレクトリのすべての最初のレベルのサブディレクトリ名を表示したい場合は、echoそれを使用して提供された内容を簡単に印刷できます。

$ 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サブシェルでコマンドが完了したときにあった場所を保持します。

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

または、別の行に入力して、奇妙なディレクトリ名(改行文字を含む名前など)でも機能していることを確認してください。

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

最後に、ディレクトリ名に改行文字やその他の奇妙な内容が含まれる可能性がある場合は、次を使用してください。

関連情報