Kuidas kustutada faile

From EIK wiki

Faili nime sees on bash erisümbol

Kõige lihtsam juhtum. Selleks, et kustutada faili, mille sees on erisümbolid, näiteks tühik, jutumärk, tärn jne peab ekraneerida selle backslash’idega või ülakomandega.

 $ rm -f 'faili nimi' 
 $ rm -f faili\ nimi 

Ülakomade abil ei saa kustutada faili, mille sees on ülakoma, isegi selle ekraneerimisel. Täieliku erisümbolite loeteluga ja ekraneerimisega bash’is saab tutvuda man bash, QUOTING osas.

Faili nimi algab sidekriipsiga

Faili, mis algab sidekriipsiga ei saa kustutada kasutades ekraneerimist ja rm käsk hakkab oleva sidekriipsi tajuma oma argumendi alguseks. Probleemi lahendus on üsna lihtne:

 $ rm -f ./-fail 

või:

 $ rm -f -- -fail 

Kustuta wildcard mask’i abil

Kui kustutavaid failid sattuvad wildcard-mask’i alla saab kustutada ära kogu faili gruppi kasutades

 $ rm -f *.jpg 

Faili nime sees on ASCII juhtimissümbol

Faili nime sees võib olla ASCII juhtimissümbul, näiteks reavahetus (\n\, tab (\t), backspace (\b), ESC, DELETE jm. Selliste sümbolite jaoks sobib selline lahendus:

$ rm -f $'faili\bnimi' $ rm -f 'faili\nnimi'

Saab teha ka nii – sisestada juhtimissümboli otse klaviatuurist. Selleks tuleb leida klahvikombinatsioon, mis ekraneerib järgmise sisestatud sümboli, sellega takistakse süsteemi seda faili töötleda. Tavaliselt on see klahvikombinatsioon CTRL+V. Täpselt saab seda teada stty –a käsuga parameetri lnext alt. Järgmises näites ma kustutan ESC juhtimissümboli sisaldava failinime.

$ rm -f miski # vajutage CTRL+V, siis ESC $ rm -f miski^[ # kirjutame ülejäänud sümbolid $ rm -f miski^[nimi

Faili nime sees on utf8 sümbol

Kui faili nime sees on utf8 kodeeringus sümbol, mida me ei saa klaviatuurilt sisestada, siis saab seda faili kustutada, kopeerides faili nime puhvrisse (valides selle hiirega). Peamiseks tingimuseks on see, et meie terminal peab töötama utf8 kodeeringus. Kodeerimise kehtestakse terminali seadmistes.

 $ ls -1 

朲晦

朲晩

朲晪

 $ rm -f 朲晪 

Faili kodeeringu vahetamine

Kui on kahtlus, et faili kodeering erineb terminali kodeeringust, siis me saame muuta kodeeringut kõikide failide jaoks olemasolevas kaustas. Selle tulemusena vigase kodeeringuga faile kodeeritakse uuesti, ASCII sümbolitega failid jäävad aga samaks. Selle lahenduskäigu oluliseks eeliseks on failide muutmine loetavaks.

$ convmv -fcp1251 -tutf8 * 

Nagu on ülevalt näha, selleks et õigesti failid kodeerida peab teadma terminali ja faili kodeeringut. Selleks, et teada saada mis kodeeringus on fail arusaamatu sümbolite abil on veebis erinevad tabelid.

Inode numbri abil kustutamine

Faili saab kustutada selle inode numbri abil. Inode on unikaalne identifikaator failisüsteemis. Inode numbri saab teada ls käsuga, faili kustutada find käsuga atribuudiga –delete.

$ ls -1 –i

12368 ???.txt

12363 ??.txt

$ find . -inum 12368 –delete

Hex-koodi abil kustutamine

Hardcore meetod. Leiame faili nime kõikide baitide hex-koodi ja siis kustutame faili ära, kasutades nime asemel hex-koodi.

$ for i in *; do echo -n $i | xxd ; done

$ 0000000: 6173 6466 bind

$ rm -f $'\x61\x73\x64\x66'

Autor

Dmitri Keler A32