Cách tốt để thêm phần mở rộng tệp ".jpg" vào các tệp không có phần mở rộng với bash là gì?
Cách tốt để thêm phần mở rộng tệp ".jpg" vào các tệp không có phần mở rộng với bash là gì?
Câu trả lời:
for f in *.jpg; do mv "$f" "${f%.jpg}"; done
for f in *; do mv "$f" "$f.jpg"; done
"${f%.jpg}"
là thao tác chuỗi shell bash. `$ {string% substring}` Xóa kết quả khớp ngắn nhất của chuỗi con $ từ phía sau của $ string.
.jpg
vào các tệp bình thường.
Bạn có thể sử dụng đổi tên:
rename 's/(.*)/$1.jpg/' *
rename from to file...
Một cách khác - không có vòng lặp
find . -type f -not -name "*.*" -print0 |\
xargs -0 file |\
grep 'JPEG image data' |\
sed 's/:.*//' |\
xargs -I % echo mv % %.jpg
Phá vỡ:
lệnh trên là để chạy khô , sau nó, bạn nên xóa "echo" trước mv
CHỈNH SỬA Một số người đề xuất rằng ở đây là cần thiết "Gói đối số đường dẫn trong dấu ngoặc kép; tránh tách đối số trên đường dẫn có dấu cách" .
Thông thường, khuyến nghị này là đúng, trong trường hợp này thì không. Bởi vì, ở đây cái %
được thay thế không phải bằng cách mở rộng shell mà bằng phần xargs
bên trong (trực tiếp), vì vậy cái %
sẽ được thay thế một cách chính xác ngay cả với khoảng trắng trong tên tệp.
Bản demo đơn giản:
$ mkdir xargstest
$ cd xargstest
# create two files with spaces in names
$ touch 'a b' 'c d'
$ find . -type f -print
./c d
./a b
# notice, here are spaces in the above paths
#the actual xargs mv WITHOUT quotes
$ find . -type f -print | xargs -I % mv % %.ext
$ find . -type f -print
./a b.ext
./c d.ext
# the result is correct even in case with spaces in the filenames...
Đơn giản, cd vào thư mục chứa tệp của bạn và:
for f in *;do mv $f $f.jpg;done
for f in *;do mv "$f" "$f".jpg;done
để hỗ trợ khoảng trắng trong tên tệp.
Trong trường hợp của tôi, tôi không biết loại tệp vì vậy tôi đã sử dụng lệnh mv với sự trợ giúp của lệnh tệp để kiểm tra và có thể tìm thấy loại tệp. Giải pháp này có thể không hoàn hảo cho tất cả các tệp vì lệnh tệp có thể không nhận dạng được loại tệp nhưng nó hầu như hoạt động tốt đối với tôi.
for f in *; do ext=$(file $f | awk '{print $2;}'); mv -n "$f" "$f.$ext"; done
Công dụng của awk là loại bỏ từ thứ hai của chuỗi được trả về từ tệp lệnh thực sự là phần mở rộng.
rename --dry-run * -a ".jpg" # test
* -a ".jpg" # rename
--dry-run
và -a
không có sẵn trong phiên bản của tôi rename
. Nếu điều này là cụ thể cho một số kiến trúc, nó nên được chỉ định.
Bạn có thể sử dụng di chuyển nhiều tệp . Tôi là người bảo trì dự án này. Cú pháp rất đơn giản.
mmf files*
Nó sẽ mở $ EDITOR của bạn với tất cả các tên tệp hoặc vim theo mặc định và bạn có thể chỉ cần đánh dấu phần cuối của tất cả các tên tệp bằng cách sử dụng Ctrl + v + G trong vim, lưu tệp, thoát và nó, tất cả các tệp của bạn được đổi tên
Ryan Li
Cú pháp đúng để thêm phần mở rộng tệp vào nhiều tệp trong một thư mục không có phần mở rộng tệp là
find . | while read FILE; do if [[ -n `file --mime-type "$FILE" | grep 'message/rfc822'` ]]; then mv "$FILE" "$FILE".eml; fi; done;
mv "${file}" "${file}.jpg"
?