2015-02-03 16 views
13

Tôi đang sử dụngDi chuyển nhân vật n đầu tiên từ loạt các tên tập tin với Cut

ls | cut -c 5-

này không trả về một danh sách các tên tập tin theo định dạng tôi muốn họ, nhưng không thực sự thực hiện hành động . Xin cho biết.

+0

Thực hiện hành động nào? Đổi tên các tập tin? –

+0

@EtanReisner xóa 5 ký tự đầu tiên khỏi tên tệp. –

+0

Nó loại bỏ chúng khỏi đầu ra. Tôi giả sử bạn có nghĩa là loại bỏ chúng khỏi tên tập tin cho các tập tin ... để đổi tên tất cả các tập tin trong thư mục? –

Trả lời

2

Something như thế này nên làm việc:

for x in *; do 
    echo mv $x `echo $x | cut -c 5-` 
done 

Lưu ý rằng điều này có thể phá hoại, vì vậy hãy chạy nó theo cách này đầu tiên, và sau đó loại bỏ các hàng đầu echo khi bạn tự tin rằng nó làm những gì bạn muốn.

+1

Với 'echo' đầu tiên bị xóa và được viết, điều này sẽ không hoạt động nếu không có lỗi nếu thư mục chỉ chứa các tệp không có dấu cách trong tên và dài ít nhất 6 ký tự? Trong khi trích dẫn kép '$ x' và sử dụng' $ (..) 'thay vì sử dụng di sản của các dấu tích sau sẽ lấy tên tệp có lỗi không gian, tuy nhiên, điều đó sẽ không xử lý tất cả các lỗi có thể được ném, ví dụ: nếu tên tệp chỉ dài 5 ký tự hoặc có các thư mục. – user3439894

20
rename -n 's/(.{5})(.*)$/$2/' *.* 

-n là để mô phỏng; loại bỏ nó để có được kết quả thực tế.

13

bạn có thể sử dụng lệnh sau khi bạn đang ở trong thư mục mà bạn muốn thực hiện việc đổi tên:

rename -n -v 's/^(.{5})//' * 

-n là không có hành động và -v để hiển thị những gì sẽ thay đổi. nếu bạn hài lòng với kết quả, bạn có thể xóa cả hai kết quả này

rename 's/^(.{5})//' * 
Các vấn đề liên quan