fájl letöltése

Fórumok

Leszeretnék tölteni egy fájlt, de sajnos nem tudom mert a fájlnév "/" karaktert tartalmaz. A Linux meg ezt nem igazán tolerálja. Tehát a fájl nevét ismerem, és meg kellene találnom benne a / karaktert, melyet át kellene neveznem mondjuk valamelyikre ezek közül:

U+2044 = Tört perjel: ⁄
U+2215 = osztás perjel: ∕
U+29F8 = Big Solidus: ⧸
U+FF0F = Teljes szélességű tömörség: ╱
U+2571 = Dobozrajzok átlója: ╱

A bash scriptem pontosan megtalálja a fájl nevét, de nem tudja letölteni. Letöltendő fájl neve: "blabla TV/reg blabla.pdf"

1 - Meg kell tudnom hogy a letöltendő fájl neve tartalmaz-e / karaktert. (Szerintem itt a find nem segít)

2 - Ha igen, akkor a fájlt másik névvel kell letölteni. Vagy a már említett / jelek egyikével, vagy nemes egyszerűséggel kötőjellel.

Hogy járjak el? 

Hozzászólások

Szerkesztve: 2024. 01. 07., v – 10:18

Nem kell megkeresned :-) Elég "vakon" lecserélned valami másra. Ilyemire pl. a tr teljesen alkalmas lehet:

 

fn='akarmi/valami'

fn="{tr '/' '_' <<< $fn )"

 

Ez pl. azt a törtjelet aláhúzásra cseréli - ha van. Ha nincs, akkor nem bánt semmi mást. Gőzöm nincs, a linuxos tr kezel-e UTF-8-as karaktereket, de ha valami csoda folytán nem, akkor fenti tr-t cseréld le a perl tr nevű operátorával - mondjuk az nem 10, hanem legalább 30 byte hosszú lesz. (Ha nem bash -t használsz, akkor a $( ) -en belül echo $fn | tr  '/' '_' írandó, mert elég kevés sehll ismeri a <<< átirányítást.

(Már csak azt nem értem, hogy a letöltéshez mi köze van a / jelnek.)

(Már csak azt nem értem, hogy a letöltéshez mi köze van a / jelnek.)

 

Végül is semmi, eltekintve attól az igen ritka esettől, amikor a fájlt egy fájlrendszerbe akarod letölteni és ott tárolni :-)

A céges jogászokat évekig kellett idomítanom, hogy ne olyan néven akarjanak menteni, ami tele van "/" karakterekkel. Pl. windowsos alkalmazásoknál technikailag van rá lehetőség, csak a végén jön a pánik, hogy hova lett a fájl, és miért keletkezett öt szintű könyvtárszerkezet a célmappában :-)

"Hogy járjak el?"

Először is, ezt olvasd el: http://www.catb.org/~esr/faqs/smart-questions.html

Ha az angol nem megy, akkor a Google Translate vagy Deepl ami segíthet.

A leírásod alapján nem a probléma megoldása a nehéz, hanem kikönyörögni tőled az ahhoz szükséges részinformációkat (írom ezt az alapján, ahogy az elmúlt mondjuk tíz évben feltetted a kérdéseidet).

Volt idő amikor leírtam részletesen a problémámat. Ezt talán a regisztrációm legelején tettem. De akkor jött a fekete leves hogy miért így csinálom, megőrültem vagy mi? Tehát nem segítséget, hanem az oltást kaptam. Ezért eldöntöttem hogy soha nem írom le, hanem csak körülírom a problémámat. Miért jó ez nekem? Mert látom hogy ez nem az a fajta fórum ahol meg is magyarázzák a dolgokat hogy mit miért kellene úgy tennem ahogy ajánlják.

Ez nem egy stackoverflow. Itt kemény személyeskedés megy,  S ha nem akarjátok meg IS magyarázni a folyamatot hogy mi miért, akkor én minek törjem magam hogy részletes legyek? Aki érti érti, aki nem az menjen el szövegértési tanfolyamra. Az emberek különbözőek, és emiatt különböző meglátásuk felfogásuk van a világról. Megkaptam az oltást azért, hogy minek nekem bing háttérkép? Először is úgy gondolom hogy senkinek semmi köze hozzá. A másik, ha nem akar segíteni, akkor legalább ne oltson hanem maradjon csendben. 

Najó, de látod hogy így is le kell írni mindent, megy az értetlenkedés, holott például ha tudnánk, hogy pl. wget vagy curl, vagy mifene akkor tudnánk konkrét példát mondani, hogy mi legyen (hogyan kell megadni*) az output fájl neve (bár az adott esetben szerintem eleve az URL encoding szerint menti el, szóval elve fura valami), és hogyan lehet azt legyártani.

És amúgy igen, ismerem a jelenséget, hogy az, aki nem tudja a megoldást, megpróbálja elmagyarázni, hogy hülyeség az egész. És nem lehetetlen amúgy hogy igaza van (50-50%).

Na mindegy, majd lesz valami.

 

 

*) Nade az meg man wget/curl/mifene, ami megint visszavezet oda, hogy léci energiát ölni a probléma megértésébe.

Ez milyen FS?

Hogyan kerultek oda ezek a fileok?

Be tudod tolteni azt az OS-t, ami ezt elkovette?

 

Linux alatt ott a debugfs. Russian roulette csore toltve...

Biztos, hogy ezzel a névvel van? Mert éppen azért nem lehet a filenévben '/', mert az az elérési út termináló karaktere. Azt el tudom képzelni, hogy a filenévben nincs '/', csak a link weblapon olvasható részében, tehát ami az <a> és </a> között van. Na jó, de annk meg semmi köze a file nevéhez, oda bármit lehet írni. Neked az kell, ami az <a> tag href="" részében van, ha legalább is jólértem a problémát, de ott a '/' jel nem a filenév, hanem a path termináló karaktere hasonlóan a lokális fs-hez.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Az operációs rendszerek valóban fenntartják ezt a karaktert, így fájlnévben nem szerepelhet, de akadnak olyan adatbáziskezelők, amelyek engedik. Ha rutinos fejlesztő implementálja az adatbáziskezelőt, akkor kapásból gyárt olyan adatmezőt is, amiben a fájlrendszer-kompatibilis fájlnév tárolódik, kihagyva vagy lecserélve a fájlrendszerek által nem tolerált karaktereket. Ugyanígy tesznek a böngészők is ezekkel a karakterekkel, ideértve egyes, magukat file managernek hazudó olyan megoldásokat is, mint például a Windows Explorer (az a bizonyos "Intéző"), amely, ha szerinte a lokális fájlrendszeren kívüli a fájl, rögtön az Internet Explorerben található fájlmentési rutinhoz fordul, teleszórva a fájlnevet "%" karakterekkel.

Igen. Itt van a kutya elásva. Valamiért kiment a fejemből, hogy ez valóban nem a tényleges fájl neve, hanem végül is én generálom le egy adatból, s ott meg így volt most megadva. Az elmúlt 5 év alatt egyszer sem fordult elő, így nemigazán értettem. Úgy kell elképzelni, mintha egy mp3 fájl ext információjából generálnám le a fájlnevet. Megoldottam.

Én az egészet nem értem. Hogy lehetne a fájlt átnevezni, ha egyszer még le sincs töltve? Kéne látni ezt a scriptet is, ami le próbálná szedni, meg hogy lássuk, hogy mi a pontos URL, az még jobb lenne, ha az utóbbit hex formátumban tudnád betenni (átnyomod xxd vagy od valamelyikén), hogy pontosan lássuk milyen karakterek vannak benne, milyen kódolás.

Amúgy a sima / jelet kéne kezelnie a Linuxnak, annyi, hogy shellben, CLI-ben escape-elnek kell a szóban forgó / karaktert, így: \/

Windows 95/98: 32 bit extension and a graphical shell for a 16 bit patch to an 8 bit operating system originally coded for a 4 bit microprocessor, written by a 2 bit company that can't stand 1 bit of competition.”

Nem értem. Miért ignorálná. Ha nem teszed " karakter közé, akkor nem fogja ignoráni. Ha nincs escape-elve, akkor mappatagolónak fogja venni, ha van, akkor tényleges / karakternek, ami a fájlnév része. Simán megadható így:
wget https://www.blabla/dir/file\/name.extension

Azért is kértem pontos linket, hogy ki tudjam próbálni, tesztelni, hogy nálam letöltődik-e.

Windows 95/98: 32 bit extension and a graphical shell for a 16 bit patch to an 8 bit operating system originally coded for a 4 bit microprocessor, written by a 2 bit company that can't stand 1 bit of competition.”

Valami nagyon el van tévesztve. Az általad adott példában a lokális, helyi shell elől takarod el a legutolsó törtvonalat. Holott a wgetnek átadott URL-lel majd a túloldali webszerver fog csinálni valamit. Akkor meg minek takarod a helyi shell elől?

Röviden: UNIX-like rendszerek jellemzően _lokális_ fájlnévben nem engednek meg / karaktert. Ha valami fájlnévnek látszik és van benne, akkor az elérési út része. Ha nem így lenne, nem tudnád megmondani, hogy az a/b az most az aktuális könyvtár "a" alkönyvtárában levő "b" nevű bejegyzés, vagy az aktuális könyvtárban levő "a/b" nevű bejegyzés-e.

 

(Speciel FAT és NTFS esetén az ezeket alapból használó, natív OS-ek a\b -t írnak, míg ha egy ilyen fájlrendszert felcsatolsz Linux, BSD (bármi *x) OS alatt, ott a/b -t fogsz használni.)

Szerkesztve: 2024. 01. 07., v – 15:59

Csak úgy általában "leszeretnéd tölteni", vagy valamilyen protokollt+programot használva?