Kicsit feladták a leckét. Van vagy 5 évnyi adat melyben figyelmetlenségből akadnak olyan mappa és fájlnevek melynek az elején vagy a végén egy vagy több szóköz található. Nos ezeket lehetetlen kiírni NTFS meghajtóra. Eddig azért nem volt gond mert az adatmentés is ext4 fájlrendszerre került.
IFS=$'\n'
# ez törli a szóközöket a nevek elejéről
find . -depth -name ' *' | while read f; do
mv "$f" "$(dirname "$f")/$(basename "$f" | sed 's/^ *//;s/ *$//')"
done
# ez törli a szóközöket a nevek végéről
find . -depth -name '* ' | while read f; do
mv "$f" "$(dirname "$f")/$(basename "$f" | sed 's/^ *//;s/ *$//')"
done
Kitaláltam ezt, de vannak olyan nevek is sajnos, melyek nem betűkkel kezdődnek hanem mondjuk :-tal. Az ilyen speciális nem odavaló karaktereket hogyan lehetne törölni? Erre most nem fog az agyam. Bár nem tudom hogy az ilyenek gondot okozhatnak-e a Windowsnak . Ha nem, akkor akár maradhat is.
- 196 megtekintés
Hozzászólások
Hasonló problémára a detox egy jó megoldás lehet, de ha esetleg van vim a gépen (és "értesz" is hozzá), akkor a vim-renamer lehet egy jó eszköz (nálam a vimv egy alias, hogy a vim ezt "indítsa").
- A hozzászóláshoz be kell jelentkezni
Pár kérdés:
- Fenti script miért dobja el a fájlnév elejéről *is*, meg a végéről *is* a szóközöket mind a két ciklusban, ha amúgy a megjegyzés szerint az első ciklus az elsőt a második pedig a másodikat tenné csak?
- Miért nem egy db find -ot futtatsz, amiben a két -name szerepel \( -name 'X' -o -name 'Y' \) formában (és az eredeti dupla sed-del) ?
- és ha már, miért ne lehetne tök ugyanígy a :-ot (vagy bármi egyebet) törölni?
Amúgy pedig +1 a detox-ra.
- A hozzászóláshoz be kell jelentkezni
Ha csak egy iciri-piciri esélyt kaphat egy pythonos fickó :-), akkor itt van ez:
import sys, uuid, pathlib as pth
#import re
# test data
for fn in ["helló", " first and last ", " : : helló : : ", ": helló", " helló : : halló : "]:
pth.Path(fn).touch()
#------
input("Press Enter to proceed...")
for p_fi in pth.Path(sys.argv[1]).rglob("*"):
fn= str(p_fi)
#new_fn= re.sub(r"^[ :]*(.*?)[ :]*$", r"\1", fn)
new_fn= fn.strip(" :")
if fn != new_fn:
p_new_fi= pth.Path(new_fn)
if p_new_fi.exists():
p_new_fi= p_new_fi.with_suffix(f".{uuid.uuid4()}")
print(f">{fn}<\n>{p_new_fi}<\n")
p_fi.replace(p_new_fi)
Még ki lehetne egészíteni egy --dry-run opcióval is.
- A hozzászóláshoz be kell jelentkezni
Eddig azért nem volt gond mert az adatmentés is ext4 fájlrendszerre került.
Ha csak mentés, akkor tar, (ha tömöríthető formátum akkor xz -vel) és nincs probléma. :-)
- A hozzászóláshoz be kell jelentkezni