Question

Un répertoire NTFS est ouvert dans un shell bash. quelle commande tronquera de manière récursive tous les noms de fichiers d’un répertoire jusqu’à la limite de 255 caractères requise pour ext3?

Était-ce utile?

La solution

Si vous avez accès à un shell Windows, vous pouvez utiliser:

@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

(Remarque: j'ai ajouté un écho avant la commande de changement de nom afin que vous puissiez vérifier visuellement qu'il fonctionne avant de l'exécuter. Fonctionne dans ma boîte.)

Je suis sûr que quelqu'un qui se trouve actuellement sur une boîte * nix pourrait créer un script similaire pour bash, mais je suis bloqué dans le monde Windows:)

Bonne chance!

Autres conseils

En supposant que le shell se trouve dans le répertoire NTFS en tant que PWD:

  

pour f dans *; do mv $ f $ {f: 0: 255}; terminé

Similaire à la version sed de Dave, mais évite un exec par fichier. Explose sur un très gros répertoire, à cause de la limite de ligne de commande maximale, et ne fait pas de sous-répertoires.

$ 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 {} \;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top