skriptiga kataloogist failide kustutamine ...

Algajatele mõeldud foorum. Siia võib teha kõik Linuxiga seotud teemad, mida mujale ei oska panna

Moderaator: Moderaatorid

Vasta
Kasutaja avatar
daddo
Pingviini kasutaja
Pingviini kasutaja
Postitusi: 98
Liitunud: 19.07.2005, 03:00

skriptiga kataloogist failide kustutamine ...

Postitus Postitas daddo »

Kas keegi aitaks koostada väikese scripti, mis kustutaks digikaamera mälukaardilt kopeeritud kataloogist (mis sisaldab faile kujul

IMG_1234.JPG
IMG_1235.JPG
...)
failid, mille nimi POLE samas kataloogis olevas tekstifailis ärakustuta.txt (sisuliselt ls -1 >>ärakustuta.txt kaudu saadud fail, kust on valikuliselt kustutatud osade failide nimed).


Ehk tekstifail nimekirjaga sisaldab failinimesid, mida ei tohi kustutada ja nimekirjast puuduvad failid kõik kustutamisele.
mckevin
Pingviini aktivist
Pingviini aktivist
Postitusi: 121
Liitunud: 02.05.2007, 21:44

Postitus Postitas mckevin »

midagi nii peaks olema

Kood: Vali kõik

#!/bin/bash
for f in *; do
   kustuta=1;
  for d in $(cat ärakustuta.txt); do
    if [ "$f" = "$d" ]; then
               kustuta=2;
    fi
  done
  if [ "$kustuta" = "1" ]; then
              ls $f #asenda rm $f -ga kui oled kindel et töötab õigesti
    fi
done
Kasutaja avatar
daddo
Pingviini kasutaja
Pingviini kasutaja
Postitusi: 98
Liitunud: 19.07.2005, 03:00

Postitus Postitas daddo »

mckevin kirjutas:

Kood: Vali kõik

#!/bin/bash
for f in *; do
   kustuta=1;
  for d in $(cat ärakustuta.txt); do
    if [ "$f" = "$d" ]; then
               kustuta=2;
    fi
  done
  if [ "$kustuta" = "1" ]; then
              ls $f #asenda rm $f -ga kui oled kindel et töötab õigesti
    fi
done
Põhimõtteliselt tundub tegevat täpselt seda, mida soovisin, ainult et... avastasin, et kui sekka juhtub faile, mille nimes on mingil põhjusel tühik, näiteks IMG_0068 (koopia).jpg, siis kood jääb hätta:
rm: `IMG_0068' ei saa kustutada: No such file or directory
rm: `(koopia).jpg' ei saa kustutada: No such file or directory
Kasutaja avatar
bobc
Pingviini aktivist
Pingviini aktivist
Postitusi: 165
Liitunud: 09.07.2005, 03:00

Postitus Postitas bobc »

Pakkuks ka omalt poolt pikema variandi:

Kood: Vali kõik

#!/bin/sh

oIFS=$IFS
IFS=$'\n'

`ls --color=never -1 > templist.txt`

for ignore in $(cat ./ignore.txt)
do
    echo "Eemaldan listist: ${ignore}"
    sed -i "s|${ignore}||g" ./templist.txt
done

for remove in $(cat ./templist.txt)
do
    if [ "${remove}" != "" ]; then
        if [ -f "${remove}" ]; then
            echo "F:${remove}"
            #rm "${remove}"
        fi
    fi
done

IFS=$oIFS
ignore.txt asenda oma failiga, kus sul need pildid sees mida ei tohi kustutada.
ignore.txt peaks ka olema ignore.txt templist.txt ka.

Peaks toimima ka kui Tühikud sees! Kui script asub ka samas kataloogis kus sul need JPG siis pane scriptifail ka ignore.txt listi.

Lisa eelpool toodud Mckevin scriptile
algusesse
mina paneks ka rm "$f" (siis pole vaja "escape spaces")

Kood: Vali kõik

oIFS=$IFS
IFS=$'\n'

#siin siis script 

IFS=$oIFS
Pilt
Kasutaja avatar
akbgf
Vana Pingviin
Vana Pingviin
Postitusi: 763
Liitunud: 07.10.2009, 09:04

Re: skriptiga kataloogist failide kustutamine ...

Postitus Postitas akbgf »

daddo kirjutas:Kas keegi aitaks koostada väikese scripti, ..
Ehk tekstifail nimekirjaga sisaldab failinimesid, mida ei tohi kustutada ja nimekirjast puuduvad failid kõik kustutamisele.

Ehk on ohutum, kui nihutad skriptiga nimekirjas olevad failid teise kausta ja siis kustutad rahumeeli kogu kausta tühjaks.
Siis saad enne kustutamist teises kaustas veenduda, et ikka kõik soovitud failid on sinna jõudnud.
mckevin
Pingviini aktivist
Pingviini aktivist
Postitusi: 121
Liitunud: 02.05.2007, 21:44

Postitus Postitas mckevin »

õige jah turvalisem oleks panna * asemel *.JPG või IMG*.JPG, muidu kustutab kõik ära :D tühiku probleem on lahedatud kui $f asemele panna "$f", väike näpukas :D
Vasta