在for循环中排除S3的文件夹

时间:2017-11-27 11:45:09

标签: bash amazon-s3

我正在使用以下循环:

for path in /var/www/*; do
    [ -d "${path}" ] || 
    dirname="$(basename "${path}")"
    /usr/bin/s3cmd sync "/var/www/${dirname}" s3://folder
done

我如何排除例如以cache或node_modules命名的文件的文件夹?

期待收到你的消息!

3 个答案:

答案 0 :(得分:0)

使用带有for循环的case语句。试试这个:

 for path in `/bin/ls /var/www` do
        case "$path" in
                cache*)
                        #skip this
                        continue
                        ;;
                *)
                        #process these 
                        dirname="$(basename "${path}")"
                        /usr/bin/s3cmd   sync "/var/www/${dirname}" s3://folder 
                        ;;
        esac 
done

答案 1 :(得分:0)

如果您的用例很简单,您可以尝试以下方法:

for path in `/bin/ls /var/www | grep -v "cache"` do
  [ -d "${path}" ] || 
  dirname="$(basename "${path}")"
  /usr/bin/s3cmd sync "/var/www/${dirname}" s3://folder
done

或者,使用位置参数,[和var。替换你可能有

./script.sh $1 $2 $3 

并且如果它对您的用例有用,则将其变为可变。

答案 2 :(得分:0)

您可以在for循环中使用case语句,如下所示:

for path in /var/www/*; do
      name=$(basename "$path")
      case "$name" in
            cache|node_modules)
                    continue
                    ;;
            *)
                    /usr/bin/s3cmd   sync "$path" s3://folder 
                    ;;
       esac 
done