Kuidas kustutada faile: Difference between revisions

From ICO wiki
Jump to navigationJump to search
Dkeler (talk | contribs)
No edit summary
Dkeler (talk | contribs)
No edit summary
 
(11 intermediate revisions by the same user not shown)
Line 1: Line 1:
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 ==
== 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.
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
<pre> $ rm -f 'faili nimi' </pre>
 
<pre> $ rm -f faili\ nimi </pre>


Ü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.
Line 14: Line 13:
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 ==
Line 24: Line 23:
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 ==
Line 45: Line 44:
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>
 
朲晦
朲晦
朲晩
朲晩
朲晪
朲晪
$ rm -f 朲晪
 
<pre> $ rm -f 朲晪 </pre>


== Faili kodeeringu vahetamine ==
== Faili kodeeringu vahetamine ==
Line 55: Line 58:
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.
Line 63: 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. Me leiame faili nime kõikide baitide hex-koodi ja siis kustutame faili ära, kasutades nime asemel hex-koodi.
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>


$ for i in *; do echo -n $i | xxd ; done
$ 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