Bash:在find

时间:2017-10-08 09:26:44

标签: bash find

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

这就是我想要的方式:

./linkPictures.sh 2017_wien 2017/10

它会在2017_wien_picture.jp中创建指向文件2017/10的符号链接2017_wien/picture.jpg g。

这是我目前的剧本:

#!/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

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

1 个答案:

答案 0 :(得分:3)

在像

这样的命令中
foo bar `basename {}` baz

,首先展开`...`部分。 `basename {}`{},因此最终会运行

foo bar {} baz

类似地,

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

扩展为

find . -execdir echo {} ";"

首先运行find

尝试

find . -execdir basename {} ";"

代替。