Có ai có giải pháp để loại bỏ các tệp pesky ._ và .DS_Store mà người ta nhận được sau khi di chuyển các tệp từ máy Mac sang máy chủ Linux không?
Chỉ định một thư mục bắt đầu và để nó đi? thích / var / www / html / xuống ...
Có ai có giải pháp để loại bỏ các tệp pesky ._ và .DS_Store mà người ta nhận được sau khi di chuyển các tệp từ máy Mac sang máy chủ Linux không?
Chỉ định một thư mục bắt đầu và để nó đi? thích / var / www / html / xuống ...
Câu trả lời:
thay đổi thư mục và sử dụng:
find . -name ".DS_Store" -print0 | xargs -0 rm -rf
find . -name "._*" -print0 | xargs -0 rm -rf
Không được thử nghiệm, hãy thử chúng mà không có xargs đầu tiên!
Bạn có thể thay thế khoảng thời gian sau khi tìm, bằng thư mục, thay vì thay đổi thư mục trước.
find /dir/here ...
-delete
hành động, có thể rút ngắn điều này. @JT: Tìm kiếm này đệ quy theo .
. Phụ thuộc vào có bao nhiêu tệp và thư mục con có ... bạn không thể chỉ cấm những tệp đó được tải lên?
-r
cờ (đệ quy) trong trường hợp này vì bạn không muốn xóa bất kỳ thư mục nào ..
command rm
là một giải pháp tốt hơn (nghĩa là trực tiếp hơn)? (Bằng cách "trực tiếp" Tôi có nghĩa là nó giải quyết cụ thể vấn đề trong tay và không có gì khác, và do đó ít có khả năng có bất kỳ tác dụng phụ không mong muốn nào, và cũng sẽ tự giải thích nhiều hơn cho bất kỳ ai phải duy trì mã sau.)
Hỗ trợ findutils mới hơn -delete
, vì vậy:
find . -name ".DS_Store" -delete
Thêm vào -print
để có được một danh sách xóa.
Lệnh sẽ hoạt động cho bạn nếu bạn có một hệ thống POSIX cập nhật, tôi tin. Ít nhất nó hoạt động với tôi trên OS X 10.8 và hoạt động cho những người khác đã thử nghiệm nó trên macOS 10.12 (Mojave).
Tín dụng cho @ephemient trong một bình luận trên bài đăng của @ X-Istence (nghĩ rằng nó đủ hữu ích để đảm bảo câu trả lời của chính nó).
find
đệ quy vào thư mục làm việc hiện tại theo mặc định.
.
trên macOS 10.12 (Sierra).
Lệnh đơn giản:
rm `find ./ -name '.DS_Store'` -rf
rm `find ./ -name '._'` -rf
Chúc may mắn!
rm -i
tìm này ./ -name '* py'` -rf , which did NOT prompt me to delete files. you will need to take it on the end (i.e.
-rfi`). Cảm ơn chúa vì kịch bản dự phòng của tôi.
-bash: /bin/rm: Argument list too long
cd /var/www/html && find . -name '.DS_Store' -print0 | xargs -0 rm
cd /var/www/html && find . -name '._*' -print0 | xargs -0 rm
Bạn có thể chuyển sang zsh thay vì bash. Điều này cho phép bạn sử dụng ** để khớp các tệp ở bất kỳ đâu trong cây thư mục:
$ rm /var/www/html/**/_* /var/www/html/**/.DS_Store
Bạn cũng có thể kết hợp chúng như thế này:
$ rm /var/www/html/**/(_*|.DS_Store)
Zsh có rất nhiều tính năng khác mà bash thiếu, nhưng một mình nó đáng để thực hiện chuyển đổi. Nó có sẵn trong hầu hết (có thể là tất cả) các bản phân phối linux, cũng như cygwin và OS X.
Bạn có thể tìm thêm thông tin trên trang web zsh .
**
quá :-) (mặc dù không theo mặc định, shopt -s globstar
cần phải được thiết lập)
find . -name "FILE-TO-FIND"-exec rm -rf {} \;
find
cái hỗ trợ nó, +
thì giống như xargs: find . -name "FILE-TO-FIND" -exec rm -rf {} +
- (cũng vậy, bạn đang thiếu một khoảng trống trước đó -exec
)
Ví dụ để xóa "Thumbs.db" một cách đệ quy;
find . -iname "Thumbs.db" -print0 | xargs -0 rm -rf
Xác thực bởi:
find . -iname "Thumbs.db"
Điều này bây giờ, không hiển thị bất kỳ mục nào với "Thumbs.db", bên trong đường dẫn hiện tại.
xargs
và print0
thay vì exec
(có lý do).
Tốt hơn là xem những gì đang loại bỏ bằng cách thêm -print vào câu trả lời này
find /var/www/html \( -name '.DS_Store' -or -name '._*' \) -delete -print
nếu bạn có Bash 4.0 ++
#!/bin/bash
shopt -s globstar
for file in /var/www/html/**/.DS_Store /var/www/html/**/._
do
echo rm "$file"
done
Một số điều cần lưu ý:
'-delete' không được đệ quy. Vì vậy, nếu .T tạmItems (thư mục) có tệp trong đó, lệnh sẽ thất bại.
Có rất nhiều tệp pesky được tạo bởi mac: .DS_Store ._. DS_Store .T tạm thời .ems .apdisk
Lệnh này giải quyết tất cả chúng. Lưu từ chạy tìm nhiều lần cho nhiều trận đấu.
find /home/foo \( -name '.DS_Store' -or -name '._.DS_Store' -or -name '._*' -or -name '.TemporaryItems' -or -name '.apdisk' \) -exec rm -rf {} \;
Điều này cũng hoạt động:
sudo rm -rf 2018-03-*
ở đây bạn xóa các tệp có tên của định dạng 2018-03- (một cái gì đó khác)
giữ cho nó đơn giản
sudo
mà bạn cũng không cung cấp bất kỳ thông tin nào rm
hoạt động trong bối cảnh câu trả lời của bạn.