スペースを含むディレクトリ名を読むためにforループを作成するにはどうすればよいですか?

スペースを含むディレクトリ名を読むためにforループを作成するにはどうすればよいですか?

ディレクトリ内のフォルダを検索し、各フォルダの名前を取得し、.txtファイルを作成し、フォルダ名に名前を付け、そのフォルダに入れるスクリプトを作成する必要があります。

例:ディレクトリに「1」、「2」、および「3」という名前の3つのフォルダがあります。そのフォルダ名で名前が付けられた各フォルダに.txtファイルを作成し、フォルダ1に「1.txt」、「2.txt」などをフォルダ2に保存します。

私はこのスクリプトを使ってこれをしました。

for i in $(ls -d */); do touch "$i $(basename $i).txt" ; done

問題は、名前にスペースが含まれているフォルダに対して同じことをしたいということです。たとえば、「Test Me」というフォルダがあると、次のエラーが発生します。

Me: no directory with that name

「Me」という単語だけを見て、「Test Me」全体ではなくフォルダとして扱います。

どうすればいいですか?

修正する これはTAAPSogekingが以下に述べた解決策です(彼にもう一度感謝します)。 for dir in *; do [ -d "$dir" ] && touch "$dir/$dir.txt"; done

ベストアンサー1

入れ子になったサブディレクトリがすべて必要ではなく、直接ディレクトリのみが必要であるとします。以下は、現在ループしたいディレクトリと同じディレクトリにあるとします。

for dir in *; do 
    [ -d "$dir" ] && touch -- "$dir/$dir.txt"
done
  1. 現在のディレクトリのすべてのファイルを繰り返します。
  2. ディレクトリをフィルタリングします(ディレクトリへのシンボリックリンクを含む)。
  3. 次に、指定されたディレクトリに要求されたファイルを作成します。

また、に興味がある可能性があります住宅検査一般的な間違い/悪い慣行(たとえば、この例ではlsを使用)を指摘してください。

おすすめ記事