Не удалось создать архив для большого файла с помощью pipe и xargs

Не знаю, поможет ли это вам, но вы можете переписать свой код как здесь:

#!/bin/bash -l
#$ -S /bin/bash
#$ -N $1

rm -rf ~/.minecraft
cp -rn  /media/$1/MC/minecraft  ~/
mv /home/$1/minecraft /home/$1/.minecraft
java -jar Minecraft.jar

и указать пользователя в аргументе: sh this_script.sh userбудет использовать путь /media/user.

Если вам нужен текущий пользователь, используйте:

sh this_script.sh `whoami`

Возможно, вы можете добавить sudoперед командами, если вам это нужно.

1
05.09.2017, 12:36
2 ответа

Направить список файлов в команду архивирования напрямую вместо xargs, что может (и делает в некоторых случаях) разделить список на несколько вызовов архиватора. .

Здесь используется стандартная команда paxс нестандартными расширениями -print0/ -0, поддерживаемыми некоторыми для повышения надежности:

find /data/mysqldata ! -name "*mysql-bin*" ! -name "*.log" -print0 |
  pax -0wd | gzip > file.tar.gz

(также обратите внимание на -d, без которого все файлы были бы включены в любом случае, поскольку архивирование /data/mysqldata(которое не соответствует ни одному шаблону исключения) означало бы архивирование всего, как в вашем tarподход).

Помимо paxмногие реализации tarподдерживают получение списка файлов из стандартного ввода, но обычно с другим интерфейсом между реализациями.

1
27.01.2020, 23:16

Использование GNUtar:

tar -cz -f /data/backup.tgz --exclude '*.log' --exclude 'mysql-bin.*' /data/mysqldata 

Проблема, с которой вы столкнулись, заключалась в том, что xargsвыполнялось tarнесколько (не менее двух )раз. При втором запуске tarфайл резервной копии «сжимался» (и перезаписывался ).

Вот что делает xargs. Он выполняет утилиту с максимально возможным количеством аргументов, и когда он получает больше аргументов (имен файлов в вашем случае ), он обрезает список и продолжает со списком в другом вызове утилиты.

Проблема возникла , потому что вы отправили каждый каталог и имя файла на xargs, создав очень длинный список.

4
27.01.2020, 23:16

Теги

Похожие вопросы