delmic
Anmeldungsdatum: 12. März 2010
Beiträge: 116
Wohnort: Grafenrheinfeld
|
Suche einen Befehl, der mir alle Dateien eines bestimmten Typs löscht, da die meisten davon keine Endung haben schwierig.
Hab schon gefunden, das muss irgendwie mit dem Befehl file gehen.
Speziell geht es erstmal um diese html documente werden in Nautilus als Dateityp Text angegeben.
| michael@TPE530:/media/michael/SDA/$ file ask
ask: HTML document, UTF-8 Unicode text, with very long lines, with CRLF, LF line terminators
michael@TPE530:/media/michael/SDA/$ file index.html
index.html: HTML document, UTF-8 Unicode text, with very long lines, with CRLF, LF line terminators
|
Vielen Dank
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11179
Wohnort: München
|
Du könntest find nutzen:
find . -type f -exec bash -c 'file "$1" | grep -q "HTML document" && rm "$1"' _ {} \;
|
Marc_BlackJack_Rintsch
Ehemalige
Anmeldungsdatum: 16. Juni 2006
Beiträge: 4578
Wohnort: Berlin
|
Anstelle des grep könnte man file auch nur den Mime-Typ ausgeben lassen und den mit text/html vergleichen. Ungetestet:
| find . -type f -exec bash -c '[ $(file --brief --mime-type "$1") = "text/html" ] && rm "$1"' _ {} \;
|
|
delmic
(Themenstarter)
Anmeldungsdatum: 12. März 2010
Beiträge: 116
Wohnort: Grafenrheinfeld
|
Ja mit find, leider habe ich keine Ahnung/Erfahrung mit den Commands. Mit dem find kann ich die so finden und in Datei auflisten: | find '/media/michael/SDA' -type f -exec file {} \; | grep "HTML document" > HTML.txt
|
Aber wo und wie packe ich da noch das rm command dazu? 😲
|
Marc_BlackJack_Rintsch
Ehemalige
Anmeldungsdatum: 16. Juni 2006
Beiträge: 4578
Wohnort: Berlin
|
@delmic: Das rm steht doch schon in den gezeigten Beispielen‽ Ich mag es ja gerne etwas weniger kompakt und würde find mit read und einer while -Schleife verbinden. Da wird dann auch nicht pro von find gefundener Datei eine Shell gestartet.
| while read -r -d $'\0' filename; do
[[ $(file --brief --mime-type "$filename") = 'text/html' ]] && rm "$filename"
done < <(find '/media/michael/SDA' -type f -print0)
|
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17552
Wohnort: Berlin
|
Solange es nicht kryptisch wird ist gegen Kompaktheit wenig einzuwenden:
| find -type f -exec bash -c "file --brief --mime-type {} | grep text/html" ";" -delete
|
Hier erledigt find das delete.
|
Marc_BlackJack_Rintsch
Ehemalige
Anmeldungsdatum: 16. Juni 2006
Beiträge: 4578
Wohnort: Berlin
|
@user_unknown: Ui, was gelernt: Ich wusste nicht das -exec nicht nur etwas ausführt, sondern dessen Rückgabecode auch als Filterbedingung für weitere Aktionen wie -delete dienen kann. ☺ Warum grep statt test , [ , oder [[ ?
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17552
Wohnort: Berlin
|
Marc_BlackJack_Rintsch schrieb:
Warum grep statt test , [ , oder [[ ?
Nur Gewohnheit.
@user_unknown: Ui, was gelernt: Ich wusste nicht das -exec nicht nur etwas ausführt, sondern dessen Rückgabecode auch als Filterbedingung für weitere Aktionen wie -delete dienen kann. ☺
Kunden, die Rückgabecodes nicht kannten kennen auch oft find-Ketten nicht ☺ : | find -type f -exec foo {} ";" -exec bar {} ";" -exec foobar {} ";" -delete
|
|
delmic
(Themenstarter)
Anmeldungsdatum: 12. März 2010
Beiträge: 116
Wohnort: Grafenrheinfeld
|
Dankeschön, Problem gelöst. ☺
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12829
|
Ich glaube, man kann das noch ein wenig effizienter bauen, indem man ausnutzt, dass file und die ganzen anderen Werkzeuge mit 0-terminierten Zeichenketten umgehen können: | find -type f -exec file --mime-type -0 {} + | egrep --text 'text/html$' | sed -z 's#:.*\n##' | xargs -r0 echo rm
|
Nach dem Testlauf das echo rausnehmen.
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17552
Wohnort: Berlin
|
Ich habe noch was leicht abwegiges gebaut:
| find . -type f -name "*.sh" -exec [ "file --mime-type {} = '{}: text/x-shellscript'" ] ";" -ls
|
Bis das Quoting stimmt hat man aber leicht die ganze Platte gelöscht. ☺ Wenn man -delete statt -ls verwendet.
|
delmic
(Themenstarter)
Anmeldungsdatum: 12. März 2010
Beiträge: 116
Wohnort: Grafenrheinfeld
|
Ja, immer besser man testet das erst mal an Daten die entbehrlich sind. 😇
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17552
Wohnort: Berlin
|
Ist natürlich etwas einfältig, wenn man den -name auf "*.sh" setzt. In Wahrheit funktioniert es nicht. 😉
|