2017-09-22 10 views
1

ファイルが[ -f "$1" ]で存在するかどうかをチェックしたいが、うまくいかない。コマンドは[ -f "filename.xml" ]のようなプレーンテキストで動作しています。シェル変数付きのBash条件付き

私はを返しました。これは、たとえばfilename.xmlです。何か案は?

sourcePath=/SPECIFICPATH/${1}; 
echo $sourcePath; 
echo $1; 

find /EXAMPLEPATH -name pages -type d -execdir bash -c 'cd pages && [ -f "$1" ] && pwd && cp $sourcePath .' \; 

私は、オートスクリプトでシェルスクリプトブロックを使用しています。

答えて

2

bash -c …という全く新しいシェルを起動しているので、$1を渡す必要があります。 $sourcePathと同じです(エクスポートされていない場合)。

find /EXAMPLEPATH -name pages -type d -execdir bash -c 'cd pages && [ -f "$1" ] && pwd && cp "$2" .' bash "$1" "$sourcePath" \; 

bash -c … bash "$1" "$sourcePath"では、第二bash$0である。)

+0

Ryanさんありがとうございました!それは実際に私の時間を節約しました。あなたが見ているように、私はbashを初めて使ったばかりで、私は決してこの方向に考えなかったでしょう。 通常、私はこのコマンドを端末で使っていました。これは今、最終的に働いている=)再び感謝し、素晴らしい週末を過ごす – Marco

1

あなたはfindコマンドにロジックの一部を移動した場合、サブシェルのための必要はありません。

find /EXAMPLEPATH -wholename "*/pages/$1" -print -execdir cp "$sourcePath" . \; 
  • -wholenamepagesディレクトリに$1という名前のファイルにマッチします。
  • -printが、pwdに対応します。
  • 今すぐcpと電話することができます。
関連する問題