Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux find-exec中的命令替换_Linux_Bash_Shell_Find_Posix - Fatal编程技术网

Linux find-exec中的命令替换

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:

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
非常重要,则可以单独执行一步。:)