Câu trả lời:
Điều này nối thêm đầu ra cho all.txt
cat *.txt >> all.txt
Điều này ghi đè all.txt
cat *.txt > all.txt
echo *.txt | xargs cat > all.txt
Chỉ cần nhớ, đối với tất cả các giải pháp được đưa ra cho đến nay, shell quyết định thứ tự các tệp được nối. Đối với Bash, IIRC, đó là thứ tự chữ cái. Nếu thứ tự là quan trọng, bạn nên đặt tên cho các tệp một cách thích hợp (01file.txt, 02file.txt, v.v.) hoặc chỉ định từng tệp theo thứ tự bạn muốn nó được nối.
$ cat file1 file2 file3 file4 file5 file6 > out.txt
Lệnh shell Windows type
có thể làm điều này:
type *.txt >outputfile
type
Lệnh type cũng ghi tên tệp vào stderr, không được bắt bởi >
toán tử chuyển hướng (nhưng sẽ hiển thị trên bàn điều khiển).
Bạn có thể sử dụng Windows shell copy
để nối các tệp.
C:\> copy *.txt outputfile
Từ sự giúp đỡ:
Để chắp thêm tệp, chỉ định một tệp cho đích, nhưng nhiều tệp cho nguồn (sử dụng ký tự đại diện hoặc định dạng tệp1 + tệp2 + tệp3).
Hãy cẩn thận, vì không có phương pháp nào trong số này hoạt động với số lượng lớn tệp. Cá nhân, tôi đã sử dụng dòng này:
for i in $(ls | grep ".txt");do cat $i >> output.txt;done
EDIT: Như ai đó đã nói trong các bình luận, bạn có thể thay thế $(ls | grep ".txt")
bằng$(ls *.txt)
EDIT: nhờ chuyên môn @gnourf_gnourf, việc sử dụng toàn cầu là cách chính xác để lặp lại các tệp trong một thư mục. Do đó, các biểu thức báng bổ như thế $(ls | grep ".txt")
phải được thay thế bằng *.txt
(xem bài viết ở đây ).
Giải pháp tốt
for i in *.txt;do cat $i >> output.txt;done
for i in $(ls *.txt);do cat $i >> output.txt;done
?
ls | grep
là một antipotype xấu nghiêm trọng).
ls *.txt
thất bại nếu có quá nhiều tệp (Danh sách đối số lỗi quá dài)?
cách thực dụng nhất với vỏ là lệnh mèo. những cách khác bao gồm,
awk '1' *.txt > all.txt
perl -ne 'print;' *.txt > all.txt
cat
phương pháp trên sẽ nối dòng cuối cùng và dòng đầu tiên từ các tệp liền kề.
Làm thế nào về phương pháp này?
find . -type f -name '*.txt' -exec cat {} + >> output.txt
-maxdepth 1
vào find
lệnh.
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]
Ví dụ:
type C:\*.txt > C:\1\all.txt
Điều đó sẽ lấy tất cả các tệp txt trong Thư mục C: \ và lưu nó trong Thư mục C: \ 1 theo tên của all.txt
Hoặc là
type [source folder]\* > [destination folder]\[file name].[File extension]
Ví dụ:
type C:\* > C:\1\all.txt
Điều đó sẽ lấy tất cả các tệp có trong thư mục và đặt ở đó Nội dung trong C: \ 1 \ all.txt
Bạn có thể làm như thế này:
cat [directory_path]/**/*.[h,m] > test.txt
nếu bạn sử dụng {}
để bao gồm phần mở rộng của các tệp bạn muốn tìm, có một vấn đề tuần tự.
Khi bạn gặp phải sự cố trong đó xử lý all.txt vào all.txt, Bạn có thể thử kiểm tra all.txt có tồn tại hay không, nếu có, hãy xóa
Như thế này:
[ -e $"all.txt" ] && rm $"all.txt"
cat *.txt > all.txt
>
lệnh ghi đè all.txt nếu nó tồn tại >>
thêm dữ liệu vào tệp hiện có
tất cả điều đó thật khó chịu ....
ls | grep *.txt | while read file; do cat $file >> ./output.txt; done;
công cụ dễ dàng.
find . -iname "*.txt" -maxdepth 1 -exec cat {} >> out.txt \;