Linux find-exec中的命令替换
我正试图使用find:Linux find-exec中的命令替换,linux,bash,shell,find,posix,Linux,Bash,Shell,Find,Posix,我正试图使用find: find/path/to/pdfs-iname“*.pdf”-exec-pdftotext{}~/Desktop/text/{}\ 但是,这不起作用,因为{}包含完整路径(路径可以不同)。所以我尝试使用basename,但是find似乎没有执行 find/path/to/pdfs-iname“*.pdf”-exec-pdftotext{}~/Desktop/text/$(basename{})\ 我还尝试了反勾号和各种引用整个内容的方式。似乎什么都不起作用。您的方法不起作
find/path/to/pdfs-iname“*.pdf”-exec-pdftotext{}~/Desktop/text/{}\代码>
但是,这不起作用,因为{}
包含完整路径(路径可以不同)。所以我尝试使用basename
,但是find
似乎没有执行
find/path/to/pdfs-iname“*.pdf”-exec-pdftotext{}~/Desktop/text/$(basename{})\代码>
我还尝试了反勾号和各种引用整个内容的方式。似乎什么都不起作用。您的方法不起作用,因为$(basename{})
是在调用find
之前执行的(参数中的shell扩展在调用命令之前进行评估)。像这样使用查找:
find /path/to/pdfs -iname "*.pdf" -exec bash -c \
'dest=$(basename "$1"); pdftotext "$1" ~/Desktop/texts/"${dest%.*}.txt"' _ {} \;
请注意,如果搜索的目录中存在具有相同基名称的pdf文件,则可能会覆盖某些目标文件。您的方法不起作用,因为在调用查找
之前会执行$(basename{})
(在调用命令之前会评估参数中的shell扩展)。像这样使用查找:
find /path/to/pdfs -iname "*.pdf" -exec bash -c \
'dest=$(basename "$1"); pdftotext "$1" ~/Desktop/texts/"${dest%.*}.txt"' _ {} \;
请注意,如果搜索的目录中存在具有相同基名称的pdf文件,则可能会覆盖某些目标文件。使用-execdir
而不是-exec
(如果查找实现支持它)。这将使find
更改到包含该文件的目录,然后使用该目录中的相对文件名调用特定命令
当然,这种方法将丢失命令行中任何{}
实例的完整路径名。其中包括由pdftotext
生成的文件的目标。但是,从您的描述来看,这似乎正是您想要的。使用-execdir
而不是-exec
(如果您的find
实现支持它)。这将使find
更改到包含该文件的目录,然后使用该目录中的相对文件名调用特定命令
当然,这种方法将丢失命令行中任何{}
实例的完整路径名。其中包括由pdftotext
生成的文件的目标。然而,从您的描述来看,这似乎正是您想要的。是的,这就是<代码>查找/path/to/pdfs-iname“*.pdf”-execdir-pdftotext{}~/Desktop/text/{}.txt\
如果从目标文件名中删除.pdf
非常重要,则可以单独执行一步。:)是的,这个<代码>查找/path/to/pdfs-iname“*.pdf”-execdir-pdftotext{}~/Desktop/text/{}.txt\
如果从目标文件名中删除.pdf
非常重要,则可以单独执行一步。:)