0

10MBを超える特定のファイルをアップロードする必要がある次のbashスクリプトに取り組んでいます。

#!/bin/sh

FTP_HOST=ftp.ftphost.com
FTP_USER=myftpuser
FTP_PASS=securepassword

[[ -n "$1" ]] || { echo "Usage: findlarge [PATHNAME]"; exit 0 ; }
FILES=`find "$1" -type f -size +10000k -printf '%p;'`

OLD_IFS="$IFS"
IFS=";"
FILES_ARRAY=( $FILES )
IFS="$OLD_IFS"

for fl in "${FILES_ARRAY[@]}"
 do
   INVERSE=`${fl//\/var\/www\/html/\/public_html}`
   lftp -u $FTP_USER,$FTP_PASS -e "cd '${INVERSE}'; put '${fl}';quit" $FTP_HOST
 done

これは、サーバーにアップロードする大きなファイルを必要とする特定のCDNに使用されます。続行する方法がわからない場合は、ホスト側のファイルはにあります/var/www/html/が、リモートサーバーにはに配置する必要があります/public_html/。リモートサーバーには、ホストサーバーと同じファイル構造が必要です。

私が直面している問題に$INVERSEは、実際のファイル名とパスが含まれています。ファイルを正しいディレクトリに適切に配置できるように、INVERSE変数からファイル名を削除する方法が必要です。

次のような正規表現ステートメントを知っている人はいますか?

/public_html/path/to/file/filename.zip

に変更します

/public_html/path/to/file/
4

2 に答える 2

1

あなたが使用することができます:

$(dirname "$INVERSE")

あなたが望むことを正確に行います=)

また、sedで正規表現を使用する:

$(echo "$INVERSE" | sed -e 's,/[^/]*$,/,')

正規表現の説明:

  1. スラッシュを一致させる
  2. スラッシュではない文字をできるだけ多く一致させます
  3. 行の終わりに一致する

交換の際は、最後のスラッシュを削除しないように注意してください。

于 2012-10-03T00:15:01.893 に答える
1

bashパラメーター拡張あり

$ x=/public_html/path/to/file/filename.zip
$ echo ${x%/*}/
/public_html/path/to/file/

内蔵のbashを使用できるという利点があるため、非常に軽量です。

http://wiki.bash-hackers.org/syntax/peを参照してください

于 2012-10-03T00:22:20.247 に答える