Kuidas kustutada faile: Difference between revisions
No edit summary |
|||
(2 intermediate revisions by the same user not shown) | |||
Line 66: | Line 66: | ||
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. | 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 | <pre>$ ls -1 –i</pre> | ||
12368 ???.txt | 12368 ???.txt | ||
12363 ??.txt | 12363 ??.txt | ||
$ find . -inum 12368 –delete | |||
<pre>$ find . -inum 12368 –delete</pre> | |||
== Hex-koodi abil kustutamine == | == Hex-koodi abil kustutamine == | ||
Hardcore meetod. | Hardcore meetod. Leiame faili nime kõikide baitide hex-koodi ja siis kustutame faili ära, kasutades nime asemel hex-koodi. | ||
<pre>$ for i in *; do echo -n $i | xxd ; done</pre> | |||
$ 0000000: 6173 6466 bind | $ 0000000: 6173 6466 bind | ||
$ rm -f $'\x61\x73\x64\x66' | |||
<pre>$ rm -f $'\x61\x73\x64\x66'</pre> | |||
== Autor == | |||
Dmitri Keler A32 | |||
Latest revision as of 10:41, 5 June 2013
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