Bash:在查找中运行时基本名称不一致



>整个故事:我正在编写将所有文件从一个目录链接到另一个目录的脚本。新文件名将包含原始目录名称。我此刻使用find -execdir选项。

这就是我想使用它的方式:

./linkPictures.sh 2017_wien 2017/10

它将创建一个符号链接 2017_wien_picture.jp g 在 2017/10 指向文件2017_wien/picture.jpg .

这是我当前的脚本:

#!/bin/bash
UPLOAD="/var/www/wordpress/wp-content/uploads"
SOURCE="$UPLOAD/photo-gallery/$1/"
DEST="$UPLOAD/$2/"
find $SOURCE -type f -execdir echo {} ";"

当我跑步时

find . -execdir echo `basename {}` ";"

我收到:

./.
./DSC03278.JPG

这很奇怪。所以我从命令行运行它:

basename ./DSC03278.JPG

它按预期工作:

DSC03278.JPG

为什么从find命令调用时basename不起作用?我认为脚本的其余部分会很容易。

在类似命令中

foo bar `basename {}` baz

,首先展开`...`部分。 `basename {}`{},所以这最终运行

foo bar {} baz

同样地

find . -execdir echo `basename {}` ";"

扩展到

find . -execdir echo {} ";"

首先,然后才运行find.

尝试

find . -execdir basename {} ";"

相反。

最新更新