すべてのディレクトリとサブディレクトリの機能を印刷する

すべてのディレクトリとサブディレクトリの機能を印刷する

以下の関数を使用してすべてのサブディレクトリを印刷しようとしていますが、何らかの理由でファイル名にスペース( "")が含まれている場合、名前はecho2つの部分に分割されます。例は次のとおりです。

私のディレクトリにはというディレクトリが含まれていますr1 August.request

出力は次のとおりです

r1

August.request

私が探しています

r1     August.request

これは私のスクリプトです。

#!/bin/bash

function ScanFile {
    for file in `ls` ; do  
    if [[ -d "$file" ]] ; then
            cd "$file"
            ScanFile
            cd ..
            else
            echo "$file"
    fi
    done
} 
ScanFile

ベストアンサー1

SH互換シェルにはいわゆるIFS変数があります。 IFS代表内部フィールド区切り記号。この変数は、シェルがパラメータ境界(位置パラメータの境界など)を検出する方法を制御します。

基本的には次のようになります。

set IFS=$' \t\n'

これは、入力をスペース、タブ、および改行区切りトークンに分割することを意味します。

ファイルはスペースで構成されています。この試み:

OLD_IF="$IFS"
IFS=$'\t\n'
for file in `ls -1` ; do
     # Content of your loop
done
IFS="$OLD_IFS"

ここで重要なのは、以前のIFS値を保存して復元することです。

編集:ls -11行に1つのファイルのリストを追加して、上記の操作を実行します。

おすすめ記事