2017-10-08 64 views
1

整個故事:我正在編寫將所有文件從一個目錄鏈接到另一個目錄的腳本。新文件名將包含一個原始目錄名稱。此時我使用find-execdir選項。Bash:在find中運行時的基名稱不一致

這是我要如何使用它:

./linkPictures.sh 2017_wien 2017/10 

它將創建2017/10一個符號鏈接2017_wien_picture.jp克指向文件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不起作用?我認爲腳本的其餘部分很容易。

回答

3

在命令等

foo bar `basename {}` baz 

,所述`...`部首先膨脹。 `basename {}`{},所以這結束了運行

foo bar {} baz 

同樣,

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

膨脹以

find . -execdir echo {} ";" 

第一和僅然後運行find

嘗試

find . -execdir basename {} ";" 

代替。

+0

您仍然希望'-type f'來防止拾取'.'文件。 –

+0

謝謝。我明白。儘管如此,它使得其餘的更難。我計劃做:找到。 -type d -execdir ln -s {} $ dir/$ dir_'basename {}'。發現是否可以實現? –

+1

我接受了這個答案並創建了一個新問題:https://stackoverflow.com/questions/46630069/strip-from-filename-in-find-execdir –