ký tự đặc biệt trong tên tệp (\ # 033OA)


10

Tôi đã gặp một vấn đề nhỏ với một lỗi rất cứng đầu trong một rsync. Nó gây ra bởi một tệp có một ký tự đặc biệt trong tên tệp của nó. Có những cái khác nhưng tôi có thể sắp xếp nó bằng cách thực hiện một số chuyển đổi trong mã hóa tên tệp. Tuy nhiên, một tập tin này tôi thậm chí không thể tìm thấy.

Vì vậy, đây là những gì rsync nói:

../.\#033OA.tex.pyD0MB" failed: No such file or directory (2)

Điều đầu tiên người ta chú ý là mã ký tự không thể là hex hoặc bát phân nên tôi đã tìm ra nó và chỉ tìm thấy mã này . Vì vậy, nó có thể là một CURSOR UPnhân vật (hoặc không). Tôi đã thử

ls -la *`printf '\033OA'`*

không có kết quả. Tôi cũng đã thử chuyển đầu ra ls của thư mục đó odthành vô ích.

Tôi có thể làm gì nữa? Hoặc tôi đang tìm nhân vật nào?

Cảm ơn


1
Hãy thử ls -b, trong đó sẽ hiển thị thoát theo kiểu C
enzotib

cảm ơn ... điều đó đã giúp ... có thể di chuyển nó với sự trợ giúp của printf sau đó ... nếu bạn đăng lại nhận xét này dưới dạng câu trả lời, tôi sẽ vui lòng chấp nhận nó :)
luxifer

Câu trả lời:


9

Bạn có thể sử dụng -btùy chọn để lshiển thị các ký tự không phải đồ họa dưới dạng các chuỗi thoát kiểu C.


1

ls -aqsẽ in tất cả các tên tệp, ?thay vì mỗi ký tự không thể in được. Trên nhiều biến thể unix, ls -ABhoặc ls -Ab(kiểm tra trang người đàn ông của bạn) sẽ in thoát bát phân. Với ls -aq, bạn có thể sử dụng đầu ra được hiển thị dưới dạng mẫu vỏ.

$ ls -Aq
.?OA.tex.pyD0MB
… more stuff …
$ mv -i .?OA.tex.pyD0MB weird-file
$ less weird-file

Một cách khác để có được tên tệp bằng cách nào đó là sử dụng hoàn thành shell của bạn: nhập mv .và nhấn Tabliên tục cho đến khi tên lạ được chèn vào.


ls -qđã không hiển thị các tập tin trong khi ls -bđã làm. có lẽ bởi vì tên tệp của nó không [weird-character]OA.texphải nhưng thực sự`printf %b '\033OA'`.tex
luxifer

@luxifer Có một .phần đầu của tên tệp, vì vậy bạn cần ls -Aqhoặc ls -aq. Và nếu bạn sử dụng ký tự đại diện shell, bạn cần phải làm .rõ: *sẽ không bao gồm tệp nhưng .*sẽ.
Gilles 'SO- ngừng trở nên xấu xa'

không, không có! Đầu ra tôi đã đăng là từ rsync và nó là cuối dòng. Trước tiên, Rsync sao chép $DESTINATION/.$FILENAMEtrước khi di chuyển tệp sang tên chính xác của nó. Do đó, tại nguồn, tập tin không có .ở đầu tên của nó. Ngoài ra, như đã nói, ls -qsẽ không hiển thị các tập tin trong khi ls -bđã làm.
luxifer
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.