Domanda

Una directory NTFS è aperta in una shell bash. quale comando tronca ricorsivamente tutti i nomi di file in una directory al limite di 255 caratteri richiesto per ext3?

È stato utile?

Soluzione

Se hai accesso a una shell di Windows, puoi usare:

@echo off
setlocal EnableDelayedExpansion

REM  loop over all files in the cwd
for /f %%a in ('dir /a-d /b') do (
   REM  store this filename in a variable so we can do substringing
   set ThisFileName=%%a
   REM  now take a substring
   set ThisShortFileName=!ThisFileName:~0,255!
   REM  finally, the rename:
   echo ren %%a !ThisShortFileName!
)


:EOF
endlocal

(Nota: ho aggiunto un'eco prima del comando rename solo per poter verificare visivamente che funzioni prima di eseguirlo. Funziona sulla mia scatola.)

Sono sicuro che qualcuno che si trova su una scatola * nix in questo momento potrebbe creare uno script simile per bash, ma sono bloccato nel mondo di Windows :)

Buona fortuna!

Altri suggerimenti

Supponendo che la shell si trovi nella directory NTFS in quanto è PWD:

  

per f in *; mv $ f $ {f: 0: 255}; done

Simile alla versione sed di Dave, ma evita un exec per file. Farà esplodere su una dir davvero enorme, a causa del limite massimo della riga di comando, e non subdir.

$ cat truncname 
#!/bin/bash
# requires basename, dirname, and sed
mv $1 `dirname $1`/`basename $1 | sed 's/^\(.\{0,255\}\).*/\1/'`
$ chmod a+x truncname 
$ find . -exec ./truncname {} \;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top