Menu

[FR] Allow file's path from stdout from another program

Help
Ter Tar
2020-03-28
2020-12-29
  • Ter Tar

    Ter Tar - 2020-03-28

    mkdir 123 && cd 123 touch 123.txt touch 1234.txt touch 5.txt cd ..

    find ./123 -type f \( -iname '*.txt' -o -iname '*.txt1' \) -printf "%f\0" | tar -czf ./downloaded/$archive_title.tgz -C ./123 --null -T -;

    Works.

    find ./123 -type f \( -iname '*.txt' -o -iname '*.txt1' \) -printf "%f\0" | 7z a -p'1123123' -m0=lzma2 -mx=9 -mfb=64 -md32m -ms=on -mhe=on $archive_title.7z;
    

    doesn't

    with -si it's just create file based on archive_title via output by find.

    Is there any options to provide file's list to input?

     

    Last edit: Ter Tar 2020-03-28
  • Ter Tar

    Ter Tar - 2020-03-28

    В общем имеется ли возможность, не занимаясь ерундой передать 7zip список файлов для архивации?

    @ipavlov

     
  • Ter Tar

    Ter Tar - 2020-03-28

    Впрочем решили проблему записывая вывод в lst файл, затем читая его с помощью 7z.
    Но, есть небольшая проблема которая нас так же интересует, что делать с -w? Ведь он похоже не работает для input(compress) операций, верно?

    Можно ли 7z задать working directory из которой он будет генерировать пути?

     
  • Igor Pavlov

    Igor Pavlov - 2020-03-28

    You can change current directory before calling 7z.

     
  • Ter Tar

    Ter Tar - 2020-03-28

    That's not nice idea. Coz that's iterating, we can change dir everytime when we need to switch, it's better if we could set search path via params...

     
  • Ter Tar

    Ter Tar - 2020-03-28

    Честно говоря я не вижу в использовании -w при archivate (input) операциях, это никак не сломает обратную совместимость, тебе лишь нужно добавить обработку и для входных символов тоже. Ну не знаю, дело твоё конечно, но лишним бы не было явно. tar умеет, почему бы 7z'у не поддерживать подобные вещи? output ведь поддерживаем?

     
  • Ter Tar

    Ter Tar - 2020-03-29

    7z a -aoa -m0=LZMA2:a=1:d=1536m:mf=hc4:fb=273:mc=20000:lc=0:lp=0:pb=0 -mx=9 -myx=10 -mf=on -mhc=on -mhe=on -mmt=4 -mmtf=on -mtm=on -mtc=on -mta=on -mtr=off -ms=on test.7z @test.lst;

    Also i have one more question, why when we using -mtr it's throws E_INVALIDARG?
    btw it's exists
    https://i.imgur.com/xYzM1Im.png

     
  • Igor Pavlov

    Igor Pavlov - 2020-03-29

    -mtr is new switch and it is not supported by old 7-Zip.

     
  • halo117nachos

    halo117nachos - 2020-12-29

    This sounds like the kind of usecase that the unix program xargs was meant for. Try the following:

        find ./123 -type f \( -iname '*.txt' -o -iname '*.txt1' \) -printf "%p\0" | xargs -r -0 7z a -p'1123123' -m0=lzma2 -mx=9 -mfb=64 -md32m -ms=on -mhe=on $archive_title.7z;
    

    You might need to add a -s [number] argument to xargs before the 7z argument if you have a lot of files being read from stdin, or else xargs will call 7z multiple times, processing a different batch of files each time, which would create a bunch of extra work for 7z. See man 1 xargs for more information on how to use xargs.

    You could also use the -exec option in find to do something similar:

        find ./123 -type f \( -iname '*.txt' -o -iname '*.txt1' \) -exec 7z a $archive_title.7z -p'1123123' -m0=lzma2 -mx=9 -mfb=64 -md32m -ms=on -mhe=on '{}' +;
    
     

    Last edit: halo117nachos 2020-12-29

Log in to post a comment.