2017-12-05 12 views
0

すべてのファイルをネストされたディレクトリにリストしたいが、そのディレクトリに名前にスペースを含むファイルがいくつかある。だから、ファイルの名前にスペースがなく、2つの異なるファイルにあるパスを書き留めたい。BASH:条件がfindコマンドのresultを使用して、書き込むファイルを決定する場合

これまでのところ、私は、このコマンドでその名前に有するもののスペースを見つける方法を知っている:

find /<my directory> -type f -name * * 

私が何かしたい:

find /<my directory> -type f 
    if [ name has space] 
    then > a.txt 
    else > b.txt 
    fi 

は、事前にありがとうございます。

+0

チェックこれは '/ <私のディレクトリ>型F -name * *> A.TXTを見つけ動作するかどうか。 find/ -type f -name *> b.txt' –

+0

@LohitGuptaこれには、名前が* b *のファイルには 'b.txt'にスペースが含まれます。また、いくつか引用符で囲まれたエラーがあります。 – tripleee

+0

'-name'オプションのパラメータを引用符で囲む必要があります。 – Barmar

答えて

0

条件を簡略化して-execとすることができます。これは、-execに直接シェル組み込み関数を含めることができないため、希望よりもやや複雑です。

find "$path" -type f -exec sh -c 'for f; do 
    case $f in *\ *) dest=a;; *) dest=b;; esac; 
    echo "$f" >>$dest.txt 
    done' _ {} + 

つまり、見つかったファイルを次のsh -c ...スクリプトに渡します。

ディレクトリツリーが深すぎない場合は、おそらくfindを2回実行するほうがずっと簡単です。

find "$path" -type f -name '* *' >a.txt 
find "$path" -type f \! -name '* *' >b.txt 
+0

私は試して、紛失しました:find: '-exec 'の引数がありません。そして私のディレクトリはかなり大きいので、時間を節約するためにfindとifを組み合わせる必要があります。 –

+0

私の元の答えは '{}'が欠けていましたが、私が気付いたときに編集しました。申し訳ありません。 – tripleee

+0

私は作品を、ありがとう@トリプル –

0

を使用して、2つの別々のコマンド:

find "$path" -type f -name '* *' > a.txt 
find "$path" -type f -not -name '* *' > b.txt 
関連する問題