1

すべてのディレクトリとサブディレクトリをループし、すべてのテキスト ファイルを一度 cat するシェル スクリプトを Linux で作成したいと考えています。以下は私がこれまでに得たものです。これについてはロジックが少し遅れています。誰か私に手を貸してくれませんか?ありがとう

スクリプトは引数を 1 つ取ります。例: ./script.sh directoryName

#!/bin/bash

echo "Directory $1"

cd $1
for f in *.txt
do
cat $f
done

各サブディレクトリには無限の量がある可能性があるため、ここからサブディレクトリに移動する方法がわかりません。

4

4 に答える 4

2

findまたは再帰を使用できます。

再帰を使用した例:

dump_files()
{
   for f in $1/*; do
       if [[ -f $f ]]; then
           cat $f
       elif [[ -d $f ]]; then
           dump_files $f
       fi
   done
}
于 2013-09-30T22:10:29.787 に答える
2
find . -name '*.txt' -print0 | xargs -0 cat

特定のディレクトリが必要な場合は.、 をディレクトリのフル パスに置き換えます。find拡張子で終わるファイルを取得し.txt、パイプしxargsてコマンドを実行catします。-0オプションxargsは入力を文字どおりに受け取ります。-print0モードはこれに適しています...

于 2013-09-30T22:18:46.653 に答える
0

でループを変更

for f in $(find . -name *.txt);do
   cat $f
done
于 2013-09-30T22:12:15.517 に答える