Newsgroup: it.comp.os.linux.iniziare
Titolo: Troncare nomi files.

Salve.
Vorrei troncare all'n-esimo carattere tutti i nomi dei files presenti
in una directory e in tutte le sue sottodirectory.
Esiste un comando per farlo?

 in una directory e in tutte le sue sottodirectory.
Perché? A quale scopo? Per quale motivo? Cosa vuoi fare in realtà?
Qual è il tuo vero problema? 

Loki ha scritto:

in bash:
mkdir prova
cp (tutto quello che vuoi) prova/
cd prova
(se non fai questo passaggio poi non venirti a lamentare)
ls
enne=7
for file in `ls` ; do
mv $file ${file:0:$enne-1}
done
ls
(conta i caratteri del nome piu' lungo, e verifica che il numero di file sia lo 
stesso di prima: i file abcdefg1 e abcdefg2 danno conflitto.)
-- 
TRu-TS

Qual � il tuo vero problema? 
Devo copiare, con samba, un sacco di files da un fileserver freebsd a
un pc con windows xp. La copia si interrompe non appena un nome di
file eccede una certa lunghezza. Evidentemente ufs supporta nomi di
lunghezza superiore rispetto ad ntfs.
Mi fa specie che la bash non permetta di fare cio' che desidero.
E

 Qual ï¿œ il tuo vero problema? 
Unix e' come un trapano da 2kW, queste domande non le pone neanche davanti a un
sudo rm -Rf /
:-)
-- 
TRu-TS

 Mi fa specie che la bash non permetta di fare cio' che desidero.
Permette, permette, ma bisogna programmarla un po'.
Se l'albero e' poco complesso puoi usare la procedurina che ti ho dato (ma copia 
ogni directory in una directory d'appoggio prima), se e' molto compesso bisogna 
inserirla in una procedura d'esplorazione che faccia cd ricursivi nell'albero 
(che io oggi e fino a lunedi' non avro' tempo di buttar giu', ma magari qualcun 
altro...)
-- 
TRu-TS

 buttar giu', ma magari qualcun altro...)
OK, il tempo l'ho trovato per una bozza, ma adesso completala tu ;-)
Copia quello che segue (ESCLUSE LE RIGHE "---------------------") in un file 
nella directory di livello piu' alto di quelle che vuoi trattare:
---------------------
#!/bin/bash
  enne=7
  THISDIR=`pwd`
    for file in `ls` ; do
    echo moving $file ${file:0:$enne}
#  fai qui il lavoro sporco:  mv $file ${file:0:$enne}
    done
  for DIR in `find . -type d -print` ; do
   cd $DIR
   pwd
    for file in `ls` ; do
    echo moving $file ${file:0:$enne}
#  fai qui il lavoro sporco:  mv $file ${file:0:$enne}
    done
    cd  $THISDIR
    pwd
   done
exit
------------------------
rendilo eseguibile, eseguilo (non modifica niente sul disco), vedi di capire 
bene quello che fa (nota che provando ho cambiato $enne-1 in $enne), e se e 
quando sei sicurissimo, togli i commenti "#  fai qui il lavoro sporco:", al 
posto di 7 metti il numero giusto, e vai.
SEMPRE con la precauzione PRIMA!!! di una copia di backup di tutto quello che 
vai a modificare.
-- 
TRu-TS

 Mi fa specie che la bash non permetta di fare cio' che desidero.
Come ti hanno gia` detto, il comando non esiste, dovrai farlo a mano.
Occhio a:
1) non generare lo stesso nome con due files diversi (per esempio 
"foto.del.12.Luglio.2009.0001.jpg" e "foto.del.12.Luglio.2009.0002.jpg" troncati 
a 15 caratteri, entrambi danno: "foto.del.12.jpg")
2) quando tronchi il nome di un file, faresti meglio a troncare il nome e non 
l'estensione (quindi ti servira` un po' di logica per mantenere l'estensione)
Come farlo in modo efficace non sono sicuro. Ho paura che il metodo migliore sia 
in codice C. Con uno shell script si fa, ma non girera` molto veloce (dipende da 
quanto sono grossi i files, se questi sono piccoli e ce ne sono qualche 
migliaia...).
Ho trovato qualche riferimento per tar che scrive in formato pax, sembra ci sia 
un'estensione "filename-lenght-max"...
Ciao,
-- 
        Roberto Divia`              Love at first sight is one of the greatest
Dep:PH Bat:53 Mailbox:C02110      labour-saving devices the world has ever seen
Route de Meyrin 385               ---------------------------------------------
Case Postale                                Phone:  
+41-22-767-4994
CH-1211 Geneve 23 CERN                      Fax:    
+41-22-767-9585
Switzerland                                 E-Mail: 
Robert...@cern.ch

 Mi fa specie che la bash non permetta di fare cio' che desidero.
Con la BASH si possono fare molte cose, compresa questa.
Però il tuo problema non è fare il mangling, cosa che già fa Samba,
il tuo problema è configurare Samba in modo che lo faccia nel modo 
giusto. Non inventare ogni volta l'acqua calda.
 

Ragazzi se possibile vorrei risolvere usando il file managing di
samba. Solo che non so come farlo.