Câu trả lời:
Một vòng lặp đơn giản với một chút sed
ý chí sẽ thực hiện thủ thuật:
% touch xxxxx{foo,bar,baz}
% ls -l xxxxx{foo,bar,baz}
-rw-r--r-- 1 jamesog wheel 0 29 Dec 18:07 xxxxxbar
-rw-r--r-- 1 jamesog wheel 0 29 Dec 18:07 xxxxxbaz
-rw-r--r-- 1 jamesog wheel 0 29 Dec 18:07 xxxxxfoo
% for file in xxxxx*; do mv $file $(echo $file | sed -e 's/^.....//'); done
% ls -l foo bar baz
-rw-r--r-- 1 jamesog wheel 0 29 Dec 18:07 bar
-rw-r--r-- 1 jamesog wheel 0 29 Dec 18:07 baz
-rw-r--r-- 1 jamesog wheel 0 29 Dec 18:07 foo
Regex thay thế trong sed
nói phù hợp với bất kỳ năm ký tự ( .
có nghĩa là bất kỳ ký tự nào) ở đầu chuỗi ( ^
) và loại bỏ nó.
Bash có một số khả năng kịch bản tuyệt vời. Đây là một cách:
for file in ??????*; do mv $file `echo $file | cut -c6-`; done
Một cách thuận tiện để kiểm tra những gì nó sẽ làm là thêm một tiếng vang trước lệnh:
for file in ??????*; do echo mv $file `echo $file | cut -c6-`; done
Sáu dấu hỏi đảm bảo rằng bạn chỉ cố gắng thực hiện điều này với tên tệp dài hơn 5 ký tự.
Bạn có thể sử dụng sed để làm điều này
for file in * ; do mv $file $(echo $file |sed 's/^.\{5\}//g'); done