Ste*_*hen 5 bash shell-script wildcards
我正在编写一个 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
Run Code Online (Sandbox Code Playgroud)
在上传文件夹中,我有许多其他文件夹(这些文件夹是在安装插件时创建的),因此我试图遍历仅包含数字名称的文件夹,然后压缩图像。这是我到目前为止所拥有的:
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
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用 reg ex 来检测数字文件夹,这不太正确,但我想我已经接近了。
您可以bash
为此使用扩展通配符:
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
Run Code Online (Sandbox Code Playgroud)
从手册页:
+(pattern-list)
Matches one or more occurrences of the given patterns
Run Code Online (Sandbox Code Playgroud)
所以在里面放一个数字范围将匹配文件/目录。添加&&
条件将确保您仅在匹配项是目录时才压缩图像(并且您实际上已成功输入该目录)。
如果没有扩展的通配符,你甚至可以只做[1-2][0-9][0-9][0-9]/[0-1][0-9]
. 这比尝试大括号扩展要好,因为即使您没有图像,您也不会最终尝试为每个年/月输入目录。