LINUX.ORG.RU

tar не обрабатывает файл с пробелами и без раширения

 ,


0

4

Есть вот такой скрипт. Всё успешно тарил, но вылезла ошибка, он не обрабатывает файлы без расширения и с пробелами в имени.

#!/bin/bash

find /root/files -type f -name "1*" -print0 | while read -d $'\0' file
do
    MYDIRNAME=$(dirname "${file}")
    MYFILENAME=$(basename "${file}")
    MYMODIFYDIR=$(echo "$MYDIRNAME" | sed 's/^\///' | sed 's/\//_/g' | sed 's/\ /_/g')
    MYMODIFYFILENAME=$(echo "$MYFILENAME" | sed 's/\//_/g' | sed 's/\ /_/g')
    GZIP=-9 tar -zcvf /root/"$MYMODIFYDIR"_"$MYMODIFYFILENAME".tar.gz "$file"
done

Выдаёт вот такое

tar: Removing leading `/' from member names
/root/files/gdgdg/1
tar: Removing leading `/' from member names
tar: /root/files/tetst test tgdjd/1 5765765 565765: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors
tar: Removing leading `/' from member names
/root/files/tetst test tgdjd/1111111
tar: Removing leading `/' from member names
/root/files/tetst test tgdjd/1 22 33 55.txt

Но файл этот есть, я его специально создал. Т.е. файлы с пробелом, но с раширение он обрабатывает, без расширения и пробелов - тоже, а вот с пробелами и без раширения - нет.

Подскажите куда копать.

★★★

перед tar добавь ls -l «$file»

anonymous ()
Ответ на: комментарий от anonymous

ls -l «$file» | tar -zcvf /root/«$MYMODIFYDIR»_«$MYMODIFYFILENAME».tar.gz

Так не работает, пишет

tar: Cowardly refusing to create an empty archive Try 'tar --help' or 'tar --usage' for more information.

GoNaX ★★★ ()

find ... -print0
read -d $'\0' ...

Зачем это?

Kroz ★★★★★ ()
Ответ на: комментарий от GoNaX
 MYMODIFYFILENAME=$(echo "$MYFILENAME" | sed 's/\//_/g' | sed 's/\ /_/g')

ls -l "$file"

    GZIP=-9 tar -zcvf /root/"$MYMODIFYDIR"_"$MYMODIFYFILENAME".tar.gz "$file"

Я же не просил тебя ls | tar, это ты сам придумал

anonymous ()
Ответ на: комментарий от GoNaX

Тебе человек подсказал как отдебажить.

...
ls -l "file"
GZIP=-9 tar -zcvf /root/"$MYMODIFYDIR"_"$MYMODIFYFILENAME".tar.gz "$file"
...

Kroz ★★★★★ ()
Последнее исправление: Kroz (всего исправлений: 1)
Ответ на: комментарий от anonymous

Ls тот файл тоже не обрабатывает

-rw-r--r-- 1 root root 26 May 13 11:39 /root/files/gdgdg/1.gz
tar: Removing leading `/' from member names
/root/files/gdgdg/1.gz
ls: cannot access /root/files/tetst test tgdjd/1 5765765 565765: No such file or directory
tar: Removing leading `/' from member names
tar: /root/files/tetst test tgdjd/1 5765765 565765: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors
-rw-r--r-- 1 root root 31 May 13 11:36 /root/files/tetst test tgdjd/1111111.gz
tar: Removing leading `/' from member names
/root/files/tetst test tgdjd/1111111.gz
-rw-r--r-- 1 root root 48 May 13 11:23 /root/files/tetst test tgdjd/1 22 33 55.txt.gz
tar: Removing leading `/' from member names
/root/files/tetst test tgdjd/1 22 33 55.txt.gz

В консоли, если прикрыть пробелы, то

# ls -la /root/files/tetst\ test\ tgdjd/1\ 5765765\ 565765\  
-rw-r--r-- 1 root root 13 May 13 10:26 /root/files/tetst test tgdjd/1 5765765 565765

GoNaX ★★★ ()
Ответ на: комментарий от Kroz

Я понял, но вот что делать, ума не приложу.

Наверно нужно городить проверки и делать копию с человеческим именем куда-то в темп.

GoNaX ★★★ ()
Ответ на: комментарий от GoNaX

ls -la /root/files/tetst\ test\ tgdjd/1\ 5765765\ 565765\

у тебя в конце файла в имени пробел?

anonymous ()
Ответ на: комментарий от anonymous

У тебя это конечный пробел теряется при чтении read ... file

anonymous ()
#!/bin/bash

IFS=$'\0'

find /root/files -type f -name "1*" -print0 | while read -d $'\0' file
...
anonymous ()
Ответ на: комментарий от anonymous

Ну ты и глазастый. Спс. Проблема именно в том пробеле, какие-то изврашенци закинули файл.

GoNaX ★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.