Предполагая, что ваши пути не содержат пробелов или новых строк:
find . -name \*.tar.\* -execdir sh -c "echo -n \"\${PWD} \"; ls -t *.tar.* | head -n 1" \; | sort -u -k1,1
найдет все tar-архивы, запустит данный фрагмент оболочки в каждом содержащем каталоге и отфильтрует результат, чтобы только один результат хранится для каждого каталога.
Чтобы просмотреть содержимое архивов, предполагая, что их имена файлов также не содержат пробелов или новых строк:
find . -name \*.tar.\* -execdir sh -c "echo -n \"\${PWD} \"; ls -t *.tar.* | head -n 1" \; | sort -u -k1,1 | tr ' ' / | xargs -n 1 tar tvf
заменит пробел, отделяющий путь от имени файла, на «/» и передаст результат в xargs
, который будет запускать tar tvf
для каждого файла.
Для запроса между каждым тарболом добавьте -p
к команде xargs
:
find . -name \*.tar.\* -execdir sh -c "echo -n \"\${PWD} \"; ls -t *.tar.* | head -n 1" \; | sort -u -k1,1 | tr ' ' / | xargs -p -n 1 tar tvf
Я был слепо сосредоточен на ghostscript
, но благодаря Стивену я узнал, что это похоже на ошибку в qpdf
. Я отправлю четкий отчет через GitHub.
Мы можем проделать всю работу только с ghostscript
, поскольку с версии 9.07 он может линеаризовать PDF-файлы с помощью простого дополнительного флага, о чем также сообщается здесь .
Я хочу закончить свой ответ, не только предоставив актуальный метод преобразования PDF-файла в формат A-1b с помощью ghostscript
, но и сообщив, как проверить его локально с помощью java
и инструмент предварительной проверки из библиотеки Apache PDFBox.
gs -sDEVICE=pdfwrite -dBATCH -dNOPAUSE -dSAFER -sColorConversionStrategy=UseDeviceIndependentColor -dEmbedAllFonts=true -dPrinted=true -dPDFA -sProcessColorModel=DeviceRGB -dPDFACompatibilityPolicy=1 -dDetectDuplicateImages -r150 -dFastWebView=true -sOutputFile=output.pdf input.pdf
Вся информация в комментариях к коду. Загрузите последнюю версию предполетного приложения
с сайта Apache PDFBox .
На момент написания последней версии была 2.0.2.
/**
* Source:
* https://pdfbox.apache.org/1.8/cookbook/pdfavalidation.html
*
* Compilation:
* $ javac -cp preflight-app.2.0.2.jar:. Validator.java
*
* Usage:
* $ java -cp preflight-app.2.0.2.jar:. Validator input.pdf
*/
import org.apache.pdfbox.preflight.ValidationResult;
import org.apache.pdfbox.preflight.parser.PreflightParser;
import org.apache.pdfbox.preflight.PreflightDocument;
import org.apache.pdfbox.preflight.exception.SyntaxValidationException;
import org.apache.pdfbox.preflight.ValidationResult.ValidationError;
public class Validator {
public static void main( String[] args ) throws Exception {
ValidationResult result = null;
PreflightParser parser = new PreflightParser(args[0]);
try {
parser.parse();
PreflightDocument document = parser.getPreflightDocument();
document.validate();
result = document.getResult();
document.close();
} catch (SyntaxValidationException e) {
result = e.getResult();
}
if( result.isValid() )
System.out.println("The file " + args[0] + " is a valid PDF/A-1b file");
else {
System.out.println("The file " + args[0] + " is not valid, error(s) :");
for( ValidationError error : result.getErrorsList() )
System.out.println(error.getErrorCode() + " : " + error.getDetails());
}
}
}