Sziasztok!
Linuxon tárolt adatokat mentettem le egy windows-os gépre. Ez így rendben is van, de a user rengeteg könyvtár végére tett egy pontot ami azt eredményezte, hogy a ponttal végződő könyvtárakat nem hajlandó megnyitni a windows. Azt írja, hogy olyan helyre mutat ami nem elérhető.
Valahogyan megoldható valami script nyelven az, hogy ezeknek a könyvtárak végéről a pontot levágjam?
- 1647 megtekintés
Hozzászólások
Valahogy így:
#!/bin/bash for oldfile in `find -type d -name *.`; do [[ "$oldfile" =~ "(.*)\." ]] newfile="${BASH_REMATCH[1]}" mv $oldfile $newfile done
- A hozzászóláshoz be kell jelentkezni
Ügyes, de nem kell hozzá regexp-es teszt, mert egy egyszerű trükkel kikerülhető, ráadásul egy másikkal a . kihagyható a listából (amit a tied nem tesz meg, így lesz egy barátságos hibaüzenet, amikor a . -ot akarod a semmire átnevezni) :
for i in `find . -type d -name \*\?. 2> /dev/null ` ; do mv "$i" "${i%.}" ; done
- A hozzászóláshoz be kell jelentkezni
így a megváltozott nevű könyvtár alatti könyvtárat nem találja, de ha a null után teszel egy "|sort -r"-t akkor jó lesz a sorrend
- A hozzászóláshoz be kell jelentkezni
Jogos, de spóroljunk a processzel: a sort helyett find-nak egy -depth kapcsoló.
- A hozzászóláshoz be kell jelentkezni
-mindepth inkabb. Hatha alkonyvtarba is van ilyen aranyos allatka.
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
???
a depth már önmagában visszafelé listáz, a mindepthel meg csak kihagynád a fentebbi könvtárakat
- A hozzászóláshoz be kell jelentkezni
Hmm.. azt hittem lemaradt valahol egy szam, en a *depth kapcsoloit a find-nek ugy ismertem, hogy mind egy szamot varnak parameterkent. Akkor ez volt a kivetel.
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
shell tuti elég rá
de arra mondjuk kíváncsi lennék, miért tesz valaki pontot egy könyvtárnév végére
szerintem.
- A hozzászóláshoz be kell jelentkezni
Köszönöm a válaszokat.
Így működik is: for i in `find . -type d -name \*\?. 2> /dev/null -depth ` ; do mv "$i" "${i%.}" ; done
Viszont az ilyen könyvtárakat nem tudja kezelni.
Húsvét 2009. április 12-13.
mv: stat "./Húsvét" sikertelen: Nincs ilyen fájl vagy könyvtár
mv: stat "2009." sikertelen: Nincs ilyen fájl vagy könyvtár
mv: stat "április" sikertelen: Nincs ilyen fájl vagy könyvtár
mv: stat "12-13." sikertelen: Nincs ilyen fájl vagy könyvtár
Van erre megoldás?
- A hozzászóláshoz be kell jelentkezni
IFS=$'\n';for...
vagy ízlés szerint for helyett "while read"
- A hozzászóláshoz be kell jelentkezni
Köszi. Működik.
- A hozzászóláshoz be kell jelentkezni