2013-05-29 10 views
5

Vì vậy, tôi có một loạt các file như:kịch bản Bash để loại bỏ không gian trắng hàng đầu từ các tập tin tên

Aaron Lewis - Country Boy.cdg 
Aaron Lewis - Country Boy.mp3 
Adele - Rolling In The Deep.cdg 
Adele - Rolling In The Deep.mp3 
Adele - Set Fire To The Rain.cdg 
Adele - Set Fire To The Rain.mp3 
Band Perry - Better Dig Two.cdg 
Band Perry - Better Dig Two.mp3 
Band Perry - Pioneer.cdg 
Band Perry - Pioneer.mp3 

và tôi cần phải có khoảng trắng hàng đầu loại bỏ trong bash hoặc cá kịch bản.

+0

Bạn có nghĩa là bạn đang đổi tên các tệp để không có khoảng trắng ở phía trước hay các tên tệp này được lưu trữ trong tệp văn bản và bạn cần xử lý chúng? – lurker

+0

Tôi muốn đổi tên các tệp để không có khoảng trắng ở phía trước. – Acklavidian

Trả lời

5

Để loại bỏ các hàng đầu trắng không gian char trong tên tập tin mà bạn cung cấp, bạn có thể sử dụng:

IFS=$'\n' 
for f in $(find . -type f -name ' *') 
do 
    mv $f ${f/\.\/ /\.\/} 
done 

này:

  • thay đổi IFS chỉ là ký tự dòng mới; theo cách này nó không bị nghẹt thở trên các khoảng trắng trong tên tập tin.
  • tìm tất cả các tệp bắt đầu bằng khoảng trắng trong thư mục hiện tại.
  • di chuyển từng tệp sang tên tệp mà không có khoảng trắng hàng đầu, sử dụng bash thay thế chuỗi con.
+0

Điều đó đã làm được! Tôi luôn quên IFS. Đó là những gì đã giết chết kịch bản của riêng tôi. Cảm ơn – Acklavidian

0
for x in \ * ; do 
    mv "$x" `echo "$x" | sed "s/^ +//"` 
done 

Điều này thật nhanh và bẩn.

+0

không được. Tôi nhận được 'cách sử dụng: mv [-f | -i | -n] [-v] mục tiêu nguồn mv [-f | -i | -n] [-v] nguồn ... thư mục' – Acklavidian

+0

Thú vị. Tôi chạy điều này trong một vỏ bash và nó làm việc cho tôi. Tôi chỉ làm điều đó một lần nữa để chắc chắn: tôi sao chép và dán các dòng chính xác vào terminal shell của mình và nó đổi tên các tệp của tôi bắt đầu bằng không gian cho các tệp không bắt đầu bằng không gian. Tôi đang chạy Fedora 17 Linux. Hương vị của Unix bạn đang chạy là gì? – lurker

0

cat <file> | sed -e 's/^[ ]*//'

nên thực hiện thủ thuật. Capture stdout và ghi vào một tập tin.

+0

Tôi đang tìm cách xóa các khoảng trắng hàng đầu trong tên tệp. Không phải nội dung tệp. Tốt thử mặc dù. – Acklavidian

0

Bạn không cần sed cho việc này. Chỉ cần sử dụng bash chuỗi chức năng:

for file in /path/to/files/*; 
    do mv "$file" "${file# *}"; 
done