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

问题描述 投票:0回答:3

我正在使用以下循环:

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

例如,我如何排除名为cache或node_modules的文件的文件夹?

期待收到你的来信!

bash amazon-s3
3个回答
0
投票

使用case语句和for循环。试试这个:

 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

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 

并且如果它对您的用例有用,请将其变量。


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
© www.soinside.com 2019 - 2024. All rights reserved.