givenFolder将包含子文件夹。每个子文件夹应该有36个文件,其格式如下:<subfoldername>_<xx>.png
(例如abc_09.png,abc_10.png等)如果缺少36个文件(01到36)中的任何一个,则通过复制1x1在该文件夹中创建它。 png作为该文件,例如如果缺少abc_01.png,则将1x1.png复制为该子文件夹中的abc_01.png,以便最后每个子文件夹应包含所有36个编号的文件。
假设1x1.png的硬编码位置。
到目前为止,我能够做到这一点:
#!/bin/bash
#list all sub directories and files under it
if [ ! -z "$1" ]
then
echo "Arguments passed";
if [ -d "$1" ]
then
tree -if --noreport "$1";
else
echo "Supplied argument is not a directory";
fi
else
echo "No arguments passed";
fi
但我不知道如何前进。
答案 0 :(得分:4)
DEFAULT_PNG='/path/to/your/1x1.png'
if [[ $1 ]]; then
echo "Arguments passed";
if [[ -d $1 ]]; then
for curFile in "$1/"abc_{01..36}.png; do
if ! [[ -f $curFile ]]; then
cp -- "$DEFAULT_PNG" "$curFile"
fi
done
else
echo 'Supplied argument is not a directory';
fi
else
echo 'No arguments passed';
fi
在你编辑了你的问题后,我开始明白你想要一些不同的东西...所以,如果我这次做得对,这里有一个适用于子文件夹的脚本
DEFAULT_PNG='/path/to/your/1x1.png'
if [[ $1 ]]; then
echo "Arguments passed";
if [[ -d $1 ]]; then
for curSubdir in "$1/"*; do
if [[ -d $curSubdir ]]; then #skip regular files
dirBasename=$(basename -- "$curSubdir")
for curFile in "$curSubdir/$dirBasename"_{01..36}.png; do
if ! [[ -f $curFile ]]; then
cp -- "$DEFAULT_PNG" "$curFile"
fi
done
fi
done
else
echo 'Supplied argument is not a directory'
fi
else
echo 'No arguments passed'
fi
答案 1 :(得分:1)
我知道一个好的答案已经被接受了,但是我对这个问题的初步解读使得它意味着givenFolder的子文件夹可能会扩展到更加任意的深度,并且是脚本的直接参数(“givenFolder” “s)没有填充PNG文件。所以这就是看起来的样子。
向@ Aleks-Daniel致敬,提醒我使用bash的漂亮支撑扩展。
#!/bin/bash
[ $# -ge 1 ] || exit 0
DEF_PNG='/tmp/1x1.png'
[ -f "$DEF_PNG" ] || ppmmake black 1 1 | pnmtopng > "$DEF_PNG" || exit 1
function handle_subdir() {
[ -d "$1" ] || return
local base=$(basename "$1")
local png
for png in "$1"/"$base"_{01..36}.png; do
[ -e "$png" ] || cp "$DEF_PNG" "$png"
done
}
# Only process subdirectories of the directory arguments to
# the script, but do so to an arbitray depth.
#
find "$@" -type d -mindepth 1 | while read dir; do handle_subdir "$dir"; done
exit $?
如果子文件夹是由对手创建的并且包含\ n个字符,则管道查找输出到bash的read命令会产生不良行为。然而,快速测试显示它可以正确处理文件夹/目录名称中的其他特殊字符(空格,$,*等)。