Tôi đang viết một tập lệnh Bash để dọn dẹp trong âm nhạc của mình.Linux Đổi tên lệnh chữ hoa đầu tiên
tôi muốn nó để định dạng tất cả các tên tập tin và làm cho chúng và như vậy với một tìm kiếm internet chút tôi đã viết dòng này:
sed -i -e 's/[-_]/ /g' -e 's/ \+/ /g' -e **'s/\<[a-z]/\U&/g'** -e "s/$artist //g" -e "s/$album //g"
Mà tôi sử dụng để thêm các tên tập tin vào một tập tin văn bản và sau đó sed nhưng sau đó tôi không biết cách áp dụng tên mới cho các tệp.
Vì vậy, sau đó tôi bắt đầu thử nghiệm với đổi tên và quản lý để có được kết quả chính xác tương tự ngoại trừ các phần in đậm, được cho là để làm cho mỗi chữ cái đầu tiên trong một chữ hoa.
rename 's/[-_]/ /g' * && rename 's/\s+/ /g' * && **rename 's/\s\w{1}/*A-Z*/g' *** && rename 's/^\d+[[:punct:]]\s//g' * && rename "s/$artist\s//g" * && rename "s/$album\s//g" * && rename "s/($ext)//g" *
Bây giờ, mã đổi tên đang hoạt động (ít nhất là thỏa đáng), chỉ tìm một chữ cái sau ký tự SPACE, nhưng đó là sự thay thế có vấn đề. Tôi đã thử nhiều cách tiếp cận khác nhau, tất cả để lại cho tôi kết quả là chữ cái đầu tiên trong tiêu điểm được trao đổi chính xác với A-Z trong trường hợp này.
Trong trang hướng dẫn đổi tên, nó nói để viết hoa chữ thường bạn làm 's/a-z/A-Z/g' nhưng dễ dàng chỉ ra rằng nó chỉ áp dụng khi tìm a-z A-Z. Vì vậy, đây là những gì tôi cần trợ giúp. Tiền thưởng sẽ là nếu ai đó biết cách làm như trong ví dụ sed, trong đó \ < khớp với đầu mỗi từ, bởi vì tại thời điểm này, lệnh đổi tên của tôi sẽ không áp dụng cho từ đầu tiên và nó sẽ không áp dụng nếu có nhiều đĩa trông giống như "Disc name [Disc 1]" vì những lý do hiển nhiên.
Tôi nhận thấy bạn giữ "đăng xuất" trên bài đăng của mình. [Đừng làm vậy.] (Http://stackoverflow.com/faq#signatures) – chrisaycock
Nếu bạn có một tệp văn bản với cặp tên nguồn và tên đích đã có, 'sed 's/^/mv /' textfile | sh' là tất cả những gì bạn cần (mặc dù trích dẫn tên tập tin với dấu cách, vv làm phức tạp mọi thứ; đây chỉ là bằng chứng về khái niệm chứ không phải là câu trả lời thực tế). – tripleee