Команда для усечения всех имен файлов до 255 символов - PullRequest
0 голосов
/ 01 мая 2009

NTFS-каталог открыт в оболочке bash. какая команда рекурсивно усекает все имена файлов в каталоге до 255 символов, требуемых для ext3?

Ответы [ 3 ]

1 голос
/ 01 мая 2009

Если у вас есть доступ к оболочке Windows, вы можете использовать:

@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

(Примечание. Я добавил эхо-сигнал перед командой переименования, чтобы вы могли визуально убедиться, что он работает, перед тем как его запустить. Работает на моем компьютере.)

Я уверен, что кто-то, кто сейчас находится на * nix box, мог бы сделать подобный скрипт для bash, но я застрял в мире Windows:)

Удачи!

1 голос
/ 07 мая 2009

Предполагается, что оболочка находится в каталоге NTFS, так как она PWD:

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

Похоже на версию sed, основанную на Dave, но избегает exec для каждого файла. Будет взорван на действительно огромном dir из-за максимального ограничения командной строки и не будет выполнять subdirs.

0 голосов
/ 01 мая 2009
$ 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 {} \;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...