2017-10-08 7 views
1

全体の話:あるディレクトリから別のディレクトリにすべてのファイルをリンクするスクリプトを書いています。新しいファイル名には元のディレクトリ名が含まれます。私はこの時点でfindを使用し、-execdirオプションを使用します。Bash:findで実行したときのbasenameの不一致

./linkPictures.sh 2017_wien 2017/10 

そして、それはファイル2017_wien/picture.jpgを指す2017/10にシンボリックリンク2017_wien_picture.jpグラムを作成します。

これは私がそれを使用する方法です。

これは私の現在のスクリプトです:奇妙である

./. 
./DSC03278.JPG 

:私は私が受け取る

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

を実行すると

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

。だから私は、コマンドラインからそれを実行しました:

basename ./DSC03278.JPG 

と期待どおりに動作します:

DSC03278.JPG 

findコマンドから呼び出されたときbasenameが動作しないのはなぜ?スクリプトの残りの部分は簡単だと思います。

foo bar `basename {}` baz 

ようなコマンドで

答えて

3

`...`部分が最初に展開されます。 `basename {}`{}ので、これは同様

foo bar {} baz 

を実行してしまい、

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

find . -execdir echo {} ";" 

第のみ次いでfindを実行に展開します。

ではなく

find . -execdir basename {} ";" 

を試してみてください。

+0

あなたは '-type f'が' .'ファイルを受け取らないようにしたいでしょう。 –

+0

ありがとうございます。わかりました。それにもかかわらず、それは残りをより困難にします。私はやりたいと思った:見つける。 -t d -execdir ln -s {} $ dir/$ dir_'basename {} 'を実行します。それは見つけると達成可能ですか? –

+1

私はこの回答を受け入れ、新しい質問を作成しました:https://stackoverflow.com/questions/46630069/strip-from-filename-in-find-execdir –

関連する問題