2016-10-06 2 views
-1

Исходя из окон, через tar-файл, сгенерированный с 7z. У меня возникли проблемы с некоторыми длинными именами файлов: (? Или TAR)Проблемы с распаковкой файлов с длинными именами в linux

tar: xxxxxxx: Cannot open: File name too long 

Кажется, Linux имеет предел 256 символов для имен файлов. Справедливо. Я пытаюсь ограничить длину с помощью опции --xform:

tar -x --xform 's/^\(.\{200\}\).*/\1/' -f japanese.tar 

Но это не работает. Эффект sed работает, хотя:

$ echo whateverwhateverwhateverwhateverwhateverwhateverwhatever | sed -e 's/^\(.\{10\}\).*/\1/' 
whateverwh 

Является ли выражение sed не поддерживаемым tar? Любой другой способ сократить имена?

+0

Сразу после публикации этого что-то мне пришло в голову: может быть, мне не нужно указать 's'? Я делаю. Затем я попробовал что-то еще: сделайте длину строки очень короткой, 20 вместо 200, и это сработало. Кажется, что японские символы в моих файлах занимают два (или более байта), поэтому реальная длина на самом деле составляет более 256 байтов, даже после уменьшения ее до 200 символов. – dangonfast

+0

@ IgnacioVazquez-Abrams: это именно то, для чего '--xform' предназначен для: сокращения (или в общих чертах, изменения) имени файла перед созданием. Нет необходимости в другом инструменте. Просто длина была неправильной. – dangonfast

ответ

1

Вы исключили расширение файла в своем выражении. Не могли бы вы попробовать это;

tar -x --xform 's/^\(.\{200\}\).*\(\.[^.]*\)/\1\2/' -f japanese.tar 

например:

[email protected]:/tmp/test$ echo whateverwhateverwhateverwhateverwhateverwhateverwhatever.txt | sed -e 's/^\(.\{10\}\).*/\1/' 
whateverwh 
[email protected]:/tmp/test$ echo whateverwhateverwhateverwhateverwhateverwhateverwhatever.txt | sed 's/^\(.\{10\}\).*\(\.[^.]*\)/\1\2/' 
whateverwh.txt 
+0

Действительно, хороший улов! – dangonfast

Смежные вопросы