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 bằng dấu gạch dưới. Làm thế nào tôi có thể đạt được điều này?
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 bằng dấu gạch dưới. Làm thế nào tôi có thể đạt được điều này?
Câu trả lời:
Điều này nên làm điều đó:
for file in *; do mv "$file" `echo $file | tr ' ' '_'` ; done
for file in *; do mv "$file" $(echo $file | tr ' ' '_') ; done
*
thành PATH_TO_YOUR_DIRECTORY
.
Tôi thích sử dụng lệnh 'đổi tên', lệnh này lấy regexes kiểu Perl:
rename "s/ /_/g" *
Bạn có thể chạy nhanh với cờ -n:
rename -n "s/ /_/g" *
rename " " "_" *
rename
không có sẵn trong OSX nó xuất hiện.
rename
có sẵn.
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 bóp cò, chỉ cần thay đổi mv
thành echo mv
.
Nếu bạn sử dụng bash:
for file in *; do mv "$file" ${file// /_}; done
mv --help' for more information. mv: when moving multiple files, last argument must be a directory Try
mv --help 'để biết thêm thông tin.
mv --help' for more information. mv: missing file argument Try
mv --help 'để biết thêm thông tin. mv: thiếu đối số tệp Hãy thử mv --help' for more information. mv: missing file argument Try
mv --help 'để biết thêm thông tin.
Điều gì xảy ra nếu bạn muốn áp dụng tác vụ thay thế cách đệ quy ? Bạn làm điều đó như thế nào?
Chà, tôi vừa tự tìm ra câu trả lời. Không phải là giải pháp thanh lịch nhất, (cũng cố gắng đổi tên các tệp không tuân thủ điều kiện) nhưng nó hoạt động. (BTW, trong trường hợp của tôi, tôi cần đổi tên tệp bằng '% 20', không phải bằng 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
Hãy thử một cái gì đó như thế này, giả sử tất cả các tệp của bạn là .txt:
for files in *.txt; do mv “$files” `echo $files | tr ‘ ‘ ‘_’`; done
tr --help' for more information. mv: missing file argument Try
mv --help 'để biết thêm thông tin.
Đây là một giải pháp khác:
ls | awk '{printf("\"%s\"\n", $0)}' | sed 'p; s/\ /_/g' | xargs -n2 mv
Trích dẫn các biến của bạn:
for file in *; do echo mv "'$file'" "${file// /_}"; done
Loại bỏ "tiếng vang" để thực hiện đổi tên thực tế.
\'1130 lake micigan view.jpg\'': No such file or directory mv: cannot stat
\ '1130_1_bedroom_floor_plan.jpg \' ': Không có tập tin hoặc thư mục mv: không thể stat \'1130_BedPicture_8.jpg\'': No such file or directory mv: cannot stat
\' 1130_diningroom_table.jpg \ '': Không có tập tin hoặc thư mục
Cách dễ nhất để thay thế một chuỗi (ký tự khoảng trắng trong trường hợp của bạn) bằng một chuỗi khác Linux
được sử dụng sed
. Bạn có thể làm như sau
sed -i 's/\s/_/g' *
Hi vọng điêu nay co ich.
Tôi tin rằng câu trả lời của bạn là trong Thay thế khoảng trắng trong tên tệp bằng dấu gạch dưới .
Để đổi tên tất cả các tệp bằng cách .py
sử dụng tiện ích mở rộng,
find . -iname "*.py" -type f | xargs -I% rename "s/ /_/g" "%"
Đầu ra mẫu,
$ find . -iname "*.py" -type f
./Sample File.py
./Sample/Sample File.py
$ find . -iname "*.py" -type f | xargs -I% rename "s/ /_/g" "%"
$ find . -iname "*.py" -type f
./Sample/Sample_File.py
./Sample_File.py
1 - foo.jpg
và thư mục của tôi đã có1.jpg
trong đó.