我是写新bash的新手,我确信我正在努力做到这一点,所以如果有人能帮我减少我的代码或告诉我哪些错误会很棒。
我正在尝试遍历主目录以及查找文件名的子目录并将其分解,以便我可以从文件名中提取部分。
我的目录结构是这样的,这只是一个例子。文件夹如" 0000"会有所不同
/images/0000/somefilename1_this.jpg
/images/1111/somefilename2_this.jpg
/images/2222/somefilename3_this.jpg
/images/3333/somefilename4_this.jpg
我的脚本运行正常,直到我到FINALIFS='_' read -ra FINALNAME <<< "$FINALSTR";
我试图用下划线爆炸文件名并将其放入数组中。当我echo ${FINALNAME[0]};
时它是空的。在最后for done
我得到了一个synax错误,如果我注释掉最后for done
我不再收到语法错误。
我的最终目标是将部分文件名及其当前目录放入变量中,以便稍后我可以做一些事情。
0000 somefilename1
1111 somefilename2
2222 somefilename3
3333 somefilename4
任何帮助都将不胜感激。
for d in */ ; do
for file in "$d"*.jpg ; do
STR="$file";
IFS='/' read -ra SPLITNAMES <<< "$STR";
for i in "${SPLITNAMES[1]}"; do
FINALSTR="$i";
FINALIFS='_' read -ra FINALNAME <<< "$FINALSTR";
echo ${FINALNAME[0]}; <-- this is empty
for b in "${FINALNAME[0]}"; do
done <-- I get a syntax error here
done
# mkdir /images/$d$(date '+%Y-%m-%d');
# mv /images/$d$(date '+%Y-%m-%d')_* /images/$d$(date '+%Y-%m-%d');
done
done
答案 0 :(得分:2)
您可以使用randomized = (1..100).to_a.sample(10) #=> [52, 100, 92, 93, 33, 66, 78, 84, 36, 98]
简化脚本,然后使用下划线和正斜杠使用find
进行拆分:
read
答案 1 :(得分:0)
find
可以胜任
#!/bin/bash
if [ ! -d "$1" ] # Checking if the directory entered as argument1 exists
then
echo " $1 Not a valid directory"
exit 1
fi
filename_processor() # This is a bash function
{
temp1=${@##*/}
temp2=${@%/*}
echo "${temp2##*/} ${temp1%%_*}"
}
export -f filename_processor
find "$1" -type f -name "*.jpg" -name ".html" \
-exec bash -c 'filename_processor "$1"' _ {} \;
<强>参考强>