Đổi tên tệp bằng cách cắt bớt '\ n' ở cuối tên của chúng


1

Tôi đã tạo một kịch bản python để phân tích một khối lượng lớn dữ liệu và lưu kết quả cuối cùng tạo ra ~ 162 tệp. Kịch bản có tên các tập tin này Parsed_NameOfOriginal\n. Lưu ý phần \ncuối không có ý định nhưng phần nào được thêm vào bởi tập lệnh của tôi. Vì phải mất nhiều giờ để tạo ra những kết quả này, tôi không muốn chạy lại tập lệnh cố định.

Có cách nào để sử dụng Linux Terminal hoặc shell script để đổi tên mọi tệp trong một thư mục có cùng tên, nhưng cắt xén nó \nở cuối không?

Tức là Parsed_ResultA\ntrở thành Parsed_ResultA.

Lưu ý: Đó là char dòng mới đã được thêm và không phải là văn bản\n

Câu trả lời:


4

Điều này sẽ làm việc:

for f in *$'\n'; do mv -i "$f" "${f%$'\n'}"; done
  • *$'\n' mở rộng cho tất cả các tên tệp kết thúc bằng một ký tự dòng mới.

  • Các forvòng lặp đi qua tất cả các file phù hợp, tiết kiệm tên của tập tin trong biến f .

  • ${f%$'\n'}loại bỏ ký tự dòng mới từ tên tệp được lưu trữ trong f .

  • mv -i đổi tên tập tin, nhắc nhở nếu nó sẽ ghi đè lên bất cứ điều gì.


0

Bạn có thể sử dụng bộ đổi tên perl từ gói debian libfile-rename-perl:

rename 's/\n//' Parsed_Result*

Vì có một số hương vị renamengoài đó, vui lòng tạo bản sao lưu các tệp của bạn trước đó.


0

OK, OK, biến thể mới của tôi:

$ touch boo$'\n'
$ touch foo$'\n'
$ ls -l
total 4
-rw-r--r-- 1 user user 54 Feb  9 12:16 111.sh
-rw-r--r-- 1 user user  0 Feb  9 12:17 boo?
-rw-r--r-- 1 user user  0 Feb  9 12:17 foo?
$ sh 111.sh 
$ ls -l
total 4
-rw-r--r-- 1 user user 54 Feb  9 12:16 111.sh
-rw-r--r-- 1 user user  0 Feb  9 12:17 boo
-rw-r--r-- 1 user user  0 Feb  9 12:17 foo
$ cat 111.sh 
for i in `find ./ -name '*
'`
do
  mv $i$'\n' $i
done
$

Biến thể cũ (sai):

Sử dụng :

find ./ -name "*\n" | sed 's/\(.*\)\\n/mv \1\\\\n\ \1/'

để tạo danh sách các lệnh đổi tên. Và sau đó chỉ cần sao chép / dán tất cả các lệnh này vào terminal. Thí dụ:

$ touch 111\\n
$ touch 222\\n
$ ls -l
total 0
-rw-r--r-- 1 user user 0 Feb  9 11:15 111\n
-rw-r--r-- 1 user user 0 Feb  9 11:15 222\n
$ find ./ -name "*\n" | sed 's/\(.*\)\\n/mv \1\\\\n\ \1/'
mv ./111\\n ./111
mv ./222\\n ./222
$ mv ./111\\n ./111
$ mv ./222\\n ./222
$ ls -l
total 0
-rw-r--r-- 1 user user 0 Feb  9 11:15 111 
-rw-r--r-- 1 user user 0 Feb  9 11:15 222 
$   

\nlà ký tự EOL, không phải là nghĩa đen \nnhư được chỉ ra bởi OP. Bạn cần touch foo$'\n'tạo một tệp mẫu.
mpy

thanx, tôi đã thêm biến thể mới cho foo $ '\ n'case.
tháng chín
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.