web-dev-qa-db-ja.com

find-execでファイル名拡張子を削除する

findを使用する場合、.pdf中括弧(-exec)の2番目のペアから元のファイル名拡張子(つまり、{})を削除するにはどうすればよいですか?


例えば:

find ~/Documents -regex 'LOGIC.*\.pdf' -exec pdf2svg {} {}.svg \;

入力ファイル名:

~/Documents/LOGIC-P_OR_Q.pdf

出力ファイル名:

~/Documents/LOGIC-P_OR_Q.pdf.svg

必要なファイル名:

~/Documents/LOGIC-P_OR_Q.svg
1
voices

「インライン」シェルスクリプトを使用できます。 パラメータ拡張

-exec sh -c 'pdf2svg "$1" "${1%.pdf}.svg"' sh {} \;

または(より効率的に、findがサポートしている場合)

-exec sh -c 'for f; do pdf2svg "$f" "${f%.pdf}.svg"; done' sh {} +
5
steeldriver