7z ze skryptu bash nie wyklucza katalogów


1

Spotkałem się z dziwnym zachowaniem 7z (lub bash, jeszcze nie wiem). Z następującym skryptem:

#!/bin/bash
find /home/user  -type f -name "*.pdf" | cut -c 10- > /home/user/exclude_list2.lst;
lst1=" -x@/home/user/exclude_list2.lst -xr!'*.config/*' -xr!'*.cache/*' "
command=$(/usr/bin/7z a $lst1 -v2048M arch0.7z /home/user);
$command

ostatnie dwie linie można łatwo zastąpić pojedynczą linią:

/usr/bin/7z a $lst1 -v2048M arch0.7z /home/user

Próbowałem też:

command="/usr/bin/7z a  $lst1  -v2048M arch0.7z /home/dh ;"

Otrzymuję plik „arch0.7z”, ale foldery .config i .cache są nadal uwzględniane, podczas gdy:

#!/bin/bash
find /home/user  -type f -name "*.pdf" | cut -c 10- > /home/user/exclude_list2.lst;
/usr/bin/7z a -x@/home/user/exclude_list2.lst -xr!'*.config/*' -xr!'*.cache/*' -v2048M arch0.7z /home/user ;"

generuje plik z prawidłowo wykluczonymi folderami.

Ciekawe, jaka jest różnica między linią rozwiniętą ze zmiennej:

/usr/bin/7z a $lst1 -v2048M arch0.7z /home/user

a ten, który wpisałem, jest następujący:

 /usr/bin/7z a -x@/home/user/exclude_list2.lst -xr!'*.config/*' -xr!'*.cache/*' -v2048M arch0.7z /home/user

Czy jest jakiś powód tak znaczących zmian w przepływie pracy 7z?


To wydaje się mieć literówkę. Linia powinna wyglądać następująco: command=$(/usr/bin/7z a $lst1 -v2048M arch0.7z /home/user);
krowe

Nie, to była tylko literówka. Oryginalny skrypt ma wszystkie nawiasy na miejscu.
Dmytro Kh.

1
dobrze, przepraszam za to, zmieszałem kilka linii. Wygląda na to, że teraz skopiowałem bez błędów.
Dmytro Kh.

Odpowiedzi:


0

Tego nie oczekiwałem.

lst1=' -xr@/home/me/exclude_list2.lst -xr!'*.config/*' -xr!'*.cache/*' -xr!'*.local/*' '
7z a $lst1 -v2048M arch0.7z /home/me

zrób sztuczkę, podczas gdy myślałem o tym pojedynczym cytacie w -xr! .config / ' zakończy przypisanie zmiennej, faktycznie działa jako część argumentu. Działa również doskonale, jeśli moja zmienna jest tablicą.

Przy okazji, ucieczka z „!” nie zadziała, 7z mówi „Błąd: niepoprawna linia poleceń”.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.