Bashでフォルダを識別する

Bashでフォルダを識別する

基本レベルのフォルダ内のフォルダのみを識別する方法を学びたいと思います。例:

  • 基本
  • -フォルダ1
  • -フォルダ2
  • -フォルダ3

次のスクリプトで始まります。

#!/bin/bash

LOCATION="/mnt/test/build/"

for folder in $(ls $LOCATION); do

    echo "$folder"
done

ただし、スクリプトを実行すると内容全体がエコーされ、フォルダ内にスペースが含まれている場合は2行に名前が追加されます。エコラインをからに"$folder"変更すると、その'$folder'フォルダのみがエコーされます。暗黙の記事も良いです。

ベストアンサー1

ls単にディレクトリの内容を繰り返すのではなく、グローブを使用してください。

#!/bin/bash
LOCATION="/mnt/test/build/"
for folder in "$LOCATION"/*; do
    [ -d "$folder" ] || continue
    echo "$folder"
done

この[ -d "$folder" ]コマンドは$folderディレクトリかどうかをテストします。そうでない場合は、その項目をスキップしてくださいcontinue$LOCATIONと周囲の引用符に注意してください$folder。スペースが含まれているとスクリプトが$LOCATION中断されるのを防ぎます。

本当に処理する必要がある場合は、ls次のように使用してください。

ls "$LOCATION" | while read folder; do
    echo "$folder"
done

ループの後にループ内の変数にアクセスする必要があるという追加の制限がある場合は、Bashプロセス置換を使用してください。

while read folder; do
    echo "$folder"
done < <(ls "$LOCATION")

Bash マニュアルは次の場所にあります。http://www.gnu.org/software/bash/manual/

おすすめ記事