回答:
これにより、出力がall.txtに追加されます
cat *.txt >> all.txt
これはall.txtを上書きします
cat *.txt > all.txt
echo *.txt | xargs cat > all.txt
Windowsシェルコマンドtype
はこれを行うことができます:
type *.txt >outputfile
Type type
コマンドは、>
リダイレクト演算子によってキャプチャされないファイル名をstderrにも書き込みます(ただし、コンソールには表示されます)。
Windowsシェルcopy
を使用してファイルを連結できます。
C:\> copy *.txt outputfile
ヘルプから:
ファイルを追加するには、宛先には単一のファイルを指定しますが、ソースには複数のファイルを指定します(ワイルドカードまたはfile1 + file2 + file3形式を使用)。
これらの方法はいずれも多数のファイルで機能しないため、注意してください。個人的に、私はこの行を使用しました:
for i in $(ls | grep ".txt");do cat $i >> output.txt;done
編集:誰かがコメントで言ったように、あなたは置き換えることができ$(ls | grep ".txt")
て$(ls *.txt)
編集:@gnourf_gnourfの専門知識のおかげで、globの使用は、ディレクトリ内のファイルを反復処理する正しい方法です。したがって、冒とく的な表現は$(ls | grep ".txt")
は、に置き換える必要があります*.txt
(こちらの記事を参照)。
良い解決策
for i in *.txt;do cat $i >> output.txt;done
for i in $(ls *.txt);do cat $i >> output.txt;done
?
ls | grep
に悪いアンチパターンであるため、複数の反対投票に値します)。
ls *.txt
ファイルが多すぎると失敗しませんか(引数リストが長すぎるエラー)。
シェルの最も実用的な方法はcatコマンドです。他の方法には、
awk '1' *.txt > all.txt
perl -ne 'print;' *.txt > all.txt
cat
方法を使用すると、隣接するファイルの最後の行と最初の行が連結されます。
このアプローチはどうですか?
find . -type f -name '*.txt' -exec cat {} + >> output.txt
-maxdepth 1
、find
コマンドに追加する必要があるかもしれません。
sort -u --output="$OUTPUT_FILE" --files0-from=- < <(find "$DIRECTORY_NAME" -maxdepth 1 -type f -name '*.txt' -print0)
type [source folder]\*.[File extension] > [destination folder]\[file name].[File extension]
例えば:
type C:\*.txt > C:\1\all.txt
これにより、C:\フォルダー内のすべてのtxtファイルが取得され、all.txtという名前でC:\ 1フォルダーに保存されます。
または
type [source folder]\* > [destination folder]\[file name].[File extension]
例えば:
type C:\* > C:\1\all.txt
これにより、フォルダー内に存在するすべてのファイルが取得され、C:\ 1 \ all.txtにコンテンツが配置されます
all.txtをall.txtに分類する問題が発生した場合は、all.txtが存在するかどうかを確認し、存在する場合は削除してください。
このような:
[ -e $"all.txt" ] && rm $"all.txt"
cat *.txt > all.txt
>
コマンドが存在する場合、all.txtを上書き>>
し、既存のファイルにデータを追加します
それはすべて厄介です...
ls | grep *.txt | while read file; do cat $file >> ./output.txt; done;
簡単なもの。
find . -iname "*.txt" -maxdepth 1 -exec cat {} >> out.txt \;