Herkes bir Mac dosyaları A Linux Server taşıdıktan sonra aldığınız sinir bozucu ._ ve .DS_Store dosyaları kaldırmak için bir çözümü var mı?
bir başlangıç dizini belirleyin ve bırakın? / var / www / html / down gibi ...
Herkes bir Mac dosyaları A Linux Server taşıdıktan sonra aldığınız sinir bozucu ._ ve .DS_Store dosyaları kaldırmak için bir çözümü var mı?
bir başlangıç dizini belirleyin ve bırakın? / var / www / html / down gibi ...
Yanıtlar:
dizine geçin ve şunu kullanın:
find . -name ".DS_Store" -print0 | xargs -0 rm -rf
find . -name "._*" -print0 | xargs -0 rm -rf
Test edilmedi, önce xargs olmadan deneyin!
Bulma işleminden sonra, önce dizine geçmek yerine dizini değiştirebilirsiniz.
find /dir/here ...
-delete
bunu kısaltabilecek bir eylemi destekler . @JT: Bu, yinelemeli olarak altında arama yapar .
. Kaç dosya ve alt dizin olduğuna bağlı olarak ... sadece bunların yüklenmesini yasaklayamaz mısınız?
-r
Herhangi bir dizini silmek istemediğiniz için (özyinelemeli) bayrağını kullanmanız önerilmez.
command rm
iyi (daha doğrudan) bir çözüm olmaz mıydı? ("Doğrudan" derken, özellikle eldeki sorunla ve başka hiçbir şeyle ilgilenmez ve bu nedenle istenmeyen yan etkilere sahip olma olasılığı daha düşüktür ve ayrıca kodu korumak zorunda olan herkes için daha açıklayıcı olacaktır. daha sonra.)
Daha yeni bulgular şunları destekler -delete
:
find . -name ".DS_Store" -delete
-print
Ayrıca silme işlemlerinin bir listesini almak için ekleyin .
Eğer güncel bir POSIX sisteminiz varsa komut sizin için çalışacaktır. En azından benim için OS X 10.8'de çalışıyor ve macOS 10.12'de (Mojave) test eden diğerleri için çalışıyor.
@ X-Istence'nin gönderisine yaptığı bir yorumda @ephemient'e teşekkür edin (kendi cevabını garanti etmek için yeterince yardımcı olduğunu düşündüm).
find
geçerli çalışma dizinine varsayılan olarak recurses olduğu için gerekli değildir .
.
macOS 10.12'de (Sierra) ihtiyacınız var.
Basit komut:
rm `find ./ -name '.DS_Store'` -rf
rm `find ./ -name '._'` -rf
İyi şanslar!
rm -i
bulguyu kullandım ./-name '* py'' -rf , which did NOT prompt me to delete files. you will need to take it on the end (i.e.
-rfi`). Yedek senaryom için çok şükür.
-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
Bash yerine zsh'ye geçebilirsiniz. Bu, dosyaları dizin ağacındaki herhangi bir yerde eşleştirmek için ** kullanmanızı sağlar:
$ rm /var/www/html/**/_* /var/www/html/**/.DS_Store
Bunları şu şekilde de birleştirebilirsiniz:
$ rm /var/www/html/**/(_*|.DS_Store)
Zsh, bash eksik olan birçok özelliğe sahiptir, ancak tek başına geçiş yapmaya değer. Çoğu (muhtemelen tümü) linux dağıtımının yanı sıra cygwin ve OS X'te kullanılabilir.
Daha fazla bilgiyi zsh sitesinde bulabilirsiniz .
**
:-) (varsayılan olarak olmasa shopt -s globstar
da ayarlanması gerekiyor)
find . -name "FILE-TO-FIND"-exec rm -rf {} \;
find
onu destekleyen bir varsa, +
xargs benzeri: find . -name "FILE-TO-FIND" -exec rm -rf {} +
- (ayrıca, -exec
"Thumbs.db" özyinelemeli silme örneği;
find . -iname "Thumbs.db" -print0 | xargs -0 rm -rf
Doğrulayan:
find . -iname "Thumbs.db"
Bu, geçerli yolun içinde "Thumbs.db" içeren girdileri görüntülememelidir.
xargs
ve print0
yerine exec
nedenlerini açıklayın (nedenleri vardır).
Bu cevaba -print ekleyerek neyin kaldırıldığını görmek daha iyidir
find /var/www/html \( -name '.DS_Store' -or -name '._*' \) -delete -print
Bash 4.0 ++ 'nız varsa
#!/bin/bash
shopt -s globstar
for file in /var/www/html/**/.DS_Store /var/www/html/**/._
do
echo rm "$file"
done
Unutulmaması gereken birkaç nokta:
'-delete' özyinelemeli değildir. Yani .TemporaryItems (klasör) içinde dosyalar varsa, komut başarısız olur.
Mac'ler tarafından oluşturulan bu sinir bozucu dosyaların çoğu var: .DS_Store ._. DS_Store .TemporaryItems .apdisk
Bu komut hepsine hitap ediyor. Birden fazla eşleşme için tekrar tekrar bulmayı kaydeder.
find /home/foo \( -name '.DS_Store' -or -name '._.DS_Store' -or -name '._*' -or -name '.TemporaryItems' -or -name '.apdisk' \) -exec rm -rf {} \;
Bu ayrıca işe yarar:
sudo rm -rf 2018-03-*
burada, 2018-03- biçimindeki adlara sahip dosyaları silme (başka bir şey)
basit tut
sudo
veya rm
cevabınızın bağlamında nasıl çalıştığını gösteren herhangi bir bilgi sunmazsınız.