Tôi có một số tệp trong một thư mục và tôi muốn thay thế mọi ký tự khoảng trắng trong tất cả các tên tệp có dấu gạch dưới. Làm thế nào tôi có thể đạt được điều này?Linux - Thay thế khoảng trống trong tên tệp
Trả lời
này nên làm điều đó:
for file in *; do mv "$file" `echo $file | tr ' ' '_'` ; done
Tôi tin câu trả lời của bạn là ở Replace spaces in filenames with underscores.
Trong khi lý thuyết này có thể trả lời câu hỏi, [nó sẽ là thích hợp hơn] (http://meta.stackexchange.com/q/8259) để bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo. –
Hãy thử một cái gì đó như thế này, giả sử tất cả các tập tin của bạn là .txt của:
for files in *.txt; do mv “$files” `echo $files | tr ‘ ‘ ‘_’`; done
nhận được lỗi dưới đây tr: hai chuỗi phải được đưa ra khi dịch mv: thiếu đối số tệp Thử 'mv --help 'để biết thêm thông tin. –
Tr lỗi Agin: quá nhiều đối số Hãy thử 'tr --help 'để biết thêm thông tin. mv: thiếu đối số tệp Thử 'mv --help 'để biết thêm thông tin. –
Nếu bạn sử dụng bash:
for file in *; do mv "$file" ${file// /_}; done
khi tôi thử, tôi nhận được mv: khi di chuyển nhiều tệp, đối số cuối cùng phải là một thư mục Thử 'mv --help 'để biết thêm thông tin. mv: khi di chuyển nhiều tệp, đối số cuối cùng phải là thư mục Thử 'mv --help 'để biết thêm thông tin. –
Nên là '$ {FILE// _}' – soulmerge
chỉ thay thế 1 dấu cách – ghostdog74
Sử dụng sh ...
for i in *' '*; do mv "$i" `echo $i | sed -e 's/ /_/g'`; done
Nếu bạn muốn thử điều này trước khi kéo kích hoạt chỉ cần thay đổi mv
thành echo mv
.
Điều này cũng làm việc tốt –
Trích biến của bạn:
for file in *; do echo mv "'$file'" "${file// /_}"; done
Tháo "echo" để làm đổi tên thực tế.
Nó đang lặp lại các lệnh mv một cách tinh vi, nhưng không thực sự đổi tên tệp! –
loại bỏ tiếng vọng tạo ra lỗi như mv: không thể stat '\ '1130 hồ micigan view.jpg \' ': Không có tệp hoặc thư mục nào như vậy mv: không thể stat' \' 1130_1_bedroom_floor_plan.jpg \ '': Không có tệp hoặc thư mục nào mv: không thể stat '\ '1130_BedPicture_8.jpg \' ': Không có tập tin hoặc thư mục nào như vậy mv: không thể kê' \' 1130_diningroom_table.jpg \ '': Không có tập tin hoặc thư mục nào như vậy –
HĐH của bạn là gì? – ghostdog74
Tôi thích sử dụng lệnh 'đổi tên', trong đó có regexes Perl-style:
rename "s/ /_/g" *
Bạn có thể làm một chạy khô với cờ -n:
rename -n "s/ /_/g" *
điều này sẽ hoạt động * nếu * bạn có đổi tên kiểu perl và không đơn giản redhat/fedora một –
phiên bản fedora sẽ là 'đổi tên" "" _ "*' –
'đổi tên' không có sẵn trong OSX nó xuất hiện. –
gì nếu bạn muốn áp dụng tác vụ thay thế đệ quy? Bạn làm điều đó như thế nào?
Vâng, tôi đã tự tìm thấy câu trả lời. Không có giải pháp thanh lịch nhất (cố gắng đổi tên các tệp cũng không tuân thủ điều kiện) nhưng hoạt động. (BTW, trong trường hợp của tôi, tôi cần thiết để đổi tên các tập tin với '% 20', không phải với một dấu gạch dưới)
#!/bin/bash
find . -type d | while read N
do
(
cd "$N"
if test "$?" = "0"
then
for file in *; do mv "$file" ${file// /%20}; done
fi
)
done
Cách đơn giản nhất để thay thế một chuỗi (nhân vật không gian trong trường hợp của bạn) bằng một chuỗi khác trong Linux
là sử dụng sed
. Bạn có thể thực hiện như sau
sed -i 's/\s/_/g' *
Hy vọng điều này sẽ hữu ích.
Tôi đang cố gắng để chạy như một kịch bản https://hastebin.com/xemitireri.bash,
#!/bin/bash
# https://stackoverflow.com/questions/1806868/linux-replacing-spaces-in-the-file-names
find . -type d | while read N
do
(
cd "$N"
if test "$?" = "0"
then
for file in *; do mv "$file" ${file// /_}; done
fi
)
done
Tôi muốn chạy này một cách đệ quy, trên một thư mục, trong đó có nhiều thư mục trong đó, mỗi trong số đó có nhiều file trong đó. Cả tên thư mục và tên tệp đều có dấu cách trong đó (ví dụ: chạy nó trên thư mục "Thử nghiệm" chứa "Album Tốt" chứa "Đĩa 1", "Đĩa 2", v.v. Mỗi thư mục của đĩa có "Bài hát 1 .txt "," Bài hát 2.txt "," Bài hát 3.txt, v.v.) DID này đổi tên các thư mục, chứ không phải các tệp trong thư mục. Tôi gặp lỗi bash: cd: ./Disk 02: Không có tệp hoặc thư mục nào như vậy bash: cd: ./Disk 01: Không có tệp hoặc thư mục nào như vậy bash: cd:./ Đĩa 03: Không có tệp hoặc thư mục nào như vậy
Đây không phải là câu trả lời, mà là một câu hỏi khác. Hãy cân nhắc việc mở một câu hỏi mới. – Fabien
- 1. Thay thế các khoảng trống trong URL
- 2. jQuery thay thế khoảng trống trong chữ
- 3. SED thay thế khoảng trống với NULL
- 4. Truy vấn MySQL để thay thế khoảng trống trong một cột có dấu gạch dưới
- 5. kịch bản sqlcmd với khoảng trống trong tên tập tin
- 6. Làm trống tệp trong khi đang sử dụng trong linux
- 7. Xóa khoảng trống trong as3
- 8. Sự khác biệt giữa khoảng trống nội tuyến tĩnh và khoảng trống là gì?
- 9. Làm cách nào để thay thế tất cả các khoảng trống bằng% 20 trong C#
- 10. regex vim để thay thế khoảng trống bên trong dấu ngoặc kép
- 11. Làm thế nào để nhập một khoảng trống trong minibuffer thay vì hoàn thành một từ?
- 12. Thay thế không gian trùng lặp bằng một khoảng trống trong T-SQL
- 13. Khoảng trống và thụt lề trong F #
- 14. Khoảng trống là gì?
- 15. Hiện trailing khoảng trống trong vim
- 16. khoảng cách giữa các khoảng trống imagettftext
- 17. Thay thế các tên tệp bằng python
- 18. Xử lý khoảng trống khoảng thời gian trong Chaco
- 19. Linux tìm và thay thế
- 20. jQuery thay thế html trong khoảng
- 21. Làm thế nào để thiết lập tên tập tin chứa khoảng trống trong Content-Disposition tiêu đề
- 22. Cắt/cắt tệp JPG với khoảng trống bằng Java
- 23. Linux - thay đổi tên máy chủ trong CLI
- 24. PHP utf8_encode() chuyển đổi khoảng trống thành các khoảng trống không phá vỡ
- 25. git: thay đổi kiểu dáng (khoảng trống) mà không thay đổi quyền sở hữu/đổ lỗi?
- 26. Cách để khoảng trống trong HTML
- 27. Kết nối khoảng trống trong Bash
- 28. Tìm nhiều tệp đệ quy và đổi tên trong linux
- 29. Xóa tất cả các khoảng trống và các dòng trống
- 30. Làm thế nào để thoát khỏi khoảng trống trong bí danh bash?
Điều này đã không làm việc cho tôi. Nó cho rằng các tệp giống nhau tồn tại (với tên tệp sai). Ví dụ. cố gắng đổi tên '1 - foo.jpg' và thư mục của tôi đã có' 1.jpg' trong đó. – byxor