Команда для усечения всех имен файлов до 255 символов

StackOverflow https://stackoverflow.com/questions/811607

Вопрос

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

Это было полезно?

Решение

Если у вас есть доступ к оболочке 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-боксе, мог бы сделать похожий скрипт для bash, но я застрял в мире Windows:)

Удачи!

Другие советы

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

  

для f в *; do mv $ f $ {f: 0: 255}; сделано

Похоже на версию sed, основанную на Dave, но избегает exec для каждого файла. Из-за максимального ограничения командной строки будет взорван на действительно огромном dir и не будет выполнять 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 {} \;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top