Kuidas kustutada faile: Difference between revisions
Created page with 'Mõnikord juhtub, et on olemas fail, mida ei saa ära kustutada, näiteks - märgiga nime ees. == Kuidas selliseid faile ära kustutada? == = Faili nime sees on bash erisümbol …' |
No edit summary |
||
(12 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
== 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. | |||
<pre> $ rm -f 'faili nimi' </pre> | |||
<pre> $ rm -f faili\ nimi </pre> | |||
$ rm -f faili\ nimi | |||
Ülakomade abil ei saa kustutada faili, mille sees on ülakoma, isegi selle ekraneerimisel. | Ü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. | Täieliku erisümbolite loeteluga ja ekraneerimisega bash’is saab tutvuda man bash, QUOTING osas. | ||
= Faili nimi algab sidekriipsiga = | == 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: | 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 | <pre> $ rm -f ./-fail </pre> | ||
või: | või: | ||
$ rm -f -- -fail | <pre> $ rm -f -- -fail </pre> | ||
= Kustuta wildcard mask’i abil = | == Kustuta wildcard mask’i abil == | ||
Kui kustutavaid failid sattuvad wildcard-mask’i alla saab kustutada ära kogu faili gruppi kasutades | Kui kustutavaid failid sattuvad wildcard-mask’i alla saab kustutada ära kogu faili gruppi kasutades | ||
$ rm -f *.jpg | <pre> $ rm -f *.jpg </pre> | ||
= Faili nime sees on ASCII juhtimissümbol = | == 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. | Faili nime sees võib olla ASCII juhtimissümbul, näiteks reavahetus (\n\, tab (\t), backspace (\b), ESC, DELETE jm. | ||
Line 41: | Line 40: | ||
$ rm -f miski^[nimi | $ rm -f miski^[nimi | ||
= Faili nime sees on utf8 sümbol = | == 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. | 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 | <pre> $ ls -1 </pre> | ||
朲晦 | 朲晦 | ||
朲晩 | 朲晩 | ||
朲晪 | 朲晪 | ||
= Faili kodeeringu vahetamine = | <pre> $ rm -f 朲晪 </pre> | ||
== 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. | 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 * | <pre>$ convmv -fcp1251 -tutf8 * </pre> | ||
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. | 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 = | == 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. | 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 | ||
= Hex-koodi abil kustutamine = | <pre>$ find . -inum 12368 –delete</pre> | ||
== 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