脚本循环使用数字名称的文件夹

Modified on: Sat, 30 Jun 2018 11:12:00 +0800

我正在使用bash脚本来压缩我的Wordpress文件夹中的图像。 wordpress文件夹结构如下:

> wp-content/uploads/2014/01/filename.jpg > wp-content/uploads/2014/02/filename.jpg > wp-content/uploads/2014/03/filename.jpg > wp-content/uploads/2014/04/filename.jpg > > i.e. wp-content/uploads/YEAR/MONTH/filename.jpg

在uploads文件夹中,我有许多其他文件夹(在安装插件时创建),所以我试图仅使用数字名称循环文件夹,然后压缩图像。以下是我到目前为止的情况:

DIR_UPLOADS=/home/html/wp-content/uploads/ cd ${DIR_UPLOADS} for d in *; do # First level i.e. 2014, 2013 folders. regx='^[0-9]+$' # Regular Expression to check for numerics. if [[$d =~ $regx]]; then # Check if folder name is numeric. #echo "error: Not a number" >&2; exit 1 cd $d for z in *; do # Second level i.e. the months folders 01, 02 etc. cd $z for x in *; do # Third level the actual file. echo 'Compress Image' done done fi done

我正在尝试使用reg ex来检测数字文件夹,这不太对,但我认为我很接近。

最佳答案

您可以使用bash扩展globbing:

shopt -s extglob
DIR_UPLOADS=/home/html/wp-content/uploads/
cd ${DIR_UPLOADS}

for dir in $PWD/+([0-9])/+([0-9]); do
  cd "$dir" &&
    for file in *; do
      echo 'Compress Image'
    done
done

从手册页:

+(pattern-list) Matches one or more occurrences of the given patterns

因此在内部放置一个数字范围将匹配文件/目录。添加&&条件将确保您只在匹配是目录时压缩图像(并且您实际上已成功输入目录)。

没有扩展的globbing,你甚至可以只做[1-2][0-9][0-9][0-9]/[0-1][0-9]。这比尝试大括号扩展更好,因为即使你没有图像也不会最终尝试每年/每月输入目录。

作者:,Graeme

相关问答

添加新评论