Odpowiedzi:
To dołącza dane wyjściowe do pliku all.txt
cat *.txt >> all.txt
Spowoduje to zastąpienie pliku all.txt
cat *.txt > all.txt
echo *.txt | xargs cat > all.txt
Pamiętaj tylko, że dla wszystkich podanych dotychczas rozwiązań powłoka decyduje o kolejności łączenia plików. W przypadku Bash, IIRC jest to kolejność alfabetyczna. Jeśli kolejność jest ważna, należy odpowiednio nazwać pliki (01file.txt, 02file.txt itp.) Lub określić każdy plik w kolejności, w której ma być konkatenowany.
$ cat file1 file2 file3 file4 file5 file6 > out.txt
Polecenie powłoki systemu Windows type
może to zrobić:
type *.txt >outputfile
type
Polecenie type zapisuje także nazwy plików do stderr, które nie są przechwytywane przez >
operatora przekierowania (ale pojawią się na konsoli).
Do copy
łączenia plików można użyć powłoki systemu Windows .
C:\> copy *.txt outputfile
Z pomocy:
Aby dołączyć pliki, określ jeden plik docelowy, ale wiele plików źródłowych (używając symboli wieloznacznych lub formatu plik1 + plik2 + plik3).
Uważaj, ponieważ żadna z tych metod nie działa z dużą liczbą plików. Osobiście użyłem tej linii:
for i in $(ls | grep ".txt");do cat $i >> output.txt;done
EDIT: Jak ktoś powiedział w komentarzach, można zastąpić $(ls | grep ".txt")
z$(ls *.txt)
EDYCJA: dzięki wiedzy @gnourf_gnourf użycie glob jest właściwym sposobem na iterację plików w katalogu. W związku z tym bluźniercze wyrażenia, takie jak, $(ls | grep ".txt")
muszą zostać zastąpione przez *.txt
(patrz artykuł tutaj ).
Dobre rozwiązanie
for i in *.txt;do cat $i >> output.txt;done
for i in $(ls *.txt);do cat $i >> output.txt;done
?
ls | grep
jest to bardzo zły antypattern).
ls *.txt
niepowodzenia, jeśli jest zbyt wiele plików (błąd zbyt długiej listy argumentów)?
najbardziej pragmatycznym sposobem korzystania ze skorupy jest polecenie cat. inne sposoby obejmują
awk '1' *.txt > all.txt
perl -ne 'print;' *.txt > all.txt
cat
metod połączy ostatnią linię i pierwszą linię z sąsiednich plików.
Co powiesz na to podejście?
find . -type f -name '*.txt' -exec cat {} + >> output.txt
-maxdepth 1
do find
polecenia.
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]
Na przykład:
type C:\*.txt > C:\1\all.txt
To weźmie wszystkie pliki TXT w folderze C: \ i zapisze je w folderze C: \ 1 pod nazwą all.txt
Lub
type [source folder]\* > [destination folder]\[file name].[File extension]
Na przykład:
type C:\* > C:\1\all.txt
To zajmie wszystkie pliki, które są obecne w folderze i umieści tam zawartość w C: \ 1 \ all.txt
Możesz to zrobić w następujący sposób:
cat [directory_path]/**/*.[h,m] > test.txt
jeśli użyjesz {}
rozszerzenia plików, które chcesz znaleźć, istnieje problem z sekwencjonowaniem.
Gdy napotkasz problem polegający na tym, że cat all.txt do all.txt, możesz spróbować sprawdzić, czy all.txt istnieje, czy nie, jeśli istnieje, usuń
Lubię to:
[ -e $"all.txt" ] && rm $"all.txt"
cat *.txt > all.txt
>
polecenie zastępuje plik all.txt, jeśli istnieje, >>
dodaje dane do istniejącego pliku
wszystko to jest okropne ....
ls | grep *.txt | while read file; do cat $file >> ./output.txt; done;
łatwe rzeczy.
find . -iname "*.txt" -maxdepth 1 -exec cat {} >> out.txt \;