2 votos

¿Cómo utilizar una tubería de terminal para aplicar la acción de forma iterativa y guardar un archivo en la misma carpeta que la entrada?

Estoy tratando de encontrar recursivamente todos los archivos docx en una carpeta (con subcarpetas) y convertirlos a pdf utilizando una instancia headless LibreOffice. Me gustaría que el archivo de salida se guardara en la misma carpeta que el archivo de entrada. Lamentablemente, el archivo de salida siempre se guarda en el directorio actual.

¿Cómo puedo guardar el archivo de salida en el mismo directorio en el que se encontraba el archivo de entrada?

Estos son los comandos que he probado:

find . -type f -name '*.docx' -print -exec sh -c '/Applications/LibreOffice.app/Contents/MacOS/soffice --headless --convert-to pdf "{}"' \;

Pensé que podría funcionar utilizando el --outdir pero los archivos se siguen guardando en el directorio de trabajo actual.

find . -type f -name '*.docx' -print -exec sh -c '/Applications/LibreOffice.app/Contents/MacOS/soffice --headless --convert-to pdf --outdir . "{}"' \;

2voto

David Anderson Puntos 2189

Sustituir -exec con execdir . A continuación se muestra un extracto de man find .

-execdir utility [argument ...] ;
             The -execdir primary is identical to the -exec primary with the
             exception that utility will be executed from the directory that
             holds the current file.  The filename substituted for the string
             ``{}'' is not qualified.

En otras palabras, haz lo siguiente.

find . -type f -name '*.docx' -print -execdir sh -c '/Applications/LibreOffice.app/Contents/MacOS/soffice --headless --convert-to pdf "{}"' \;

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X