如何列出最新目录并将其作为变量添加到bash脚本中以递归方式处理文件
如何列出最新目录并将其作为变量添加到bash脚本中以递归方式处理文件如何列出最新目录并将其作为变量添加到bash脚本中以递归方式处理文件,bash,Bash,如何列出最新目录并将其作为变量添加到bash脚本中以递归方式处理文件 ls -t1 | head -n1 可以完美地列出最新目录,但我想将该目录名添加到脚本中,以便使用以下脚本处理其中的文件: #!/bin/bash ls | while read -r FILE do mv -v "$FILE" `echo $FILE | tr ' ' '_' ` done ls | while read -r FILE do mv -v "$FILE" `echo $FILE | tr '
ls -t1 | head -n1
可以完美地列出最新目录,但我想将该目录名添加到脚本中,以便使用以下脚本处理其中的文件:
#!/bin/bash
ls | while read -r FILE
do
mv -v "$FILE" `echo $FILE | tr ' ' '_' `
done
ls | while read -r FILE
do
mv -v "$FILE" `echo $FILE | tr '\*.JPEG' '\*.jpg' `
done
mogrify -resize 750 *.jpg
wait
jpegoptim *.jpg –max=70 --strip-all
exit
我还希望递归地处理文件,可能最多有一级子目录
基本上,bash脚本保持在目录的根目录,并处理所有最新的目录和子目录文件
好的,我将脚本修改为:
#!/bin/bash
DIR=ls -t1 | head -n1
ls $DIR | while read -r FILE
do
mv -v "$FILE" `echo $FILE | tr ' ' '_' `
done
ls $DIR | while read -r FILE
do
mv -v "$FILE" `echo $FILE | tr '\*.JPEG' '\*.jpg' `
done
mogrify -resize 750 $DIR/*.jpg
wait
jpegoptim $DIR/*.jpg –max=70 --strip-all
exit
但是它似乎无法识别$DIR变量。此bash脚本将重命名并转换当前目录中最新目录中的jpg文件以及该目录下第一级目录中的文件
#!/bin/bash
FIRST_DIR=`ls -t1F | grep / | head -n1`
DIR="./${FIRST_DIR}"
ls -t1F $DIR | while read -r FILE
do
if [ "$FILE" ]
then
if [[ $FILE = */ ]]
then
echo "here ${DIR}${FILE}."
DEEP_DIR="${DIR}${FILE}"
ls -t1 $DEEP_DIR | while read -r FILE2
do
if [ "$FILE2" ]
then
if [[ $FILE2 != */ ]]
then
RENAME=`echo ${FILE2//\*/} | tr ' ' '_' `
mv -v "${DEEP_DIR}${FILE2//\*/}" "${DEEP_DIR}${RENAME}"
FILE2=$RENAME
RENAME2=`echo ${FILE2//\*/} | tr '\*.JPEG' '\*.jpg' `
mv -v "${DEEP_DIR}${FILE2//\*/}" "${DEEP_DIR}${RENAME2}"
FILE2=$RENAME2
fi
fi
done
mogrify -resize 750 "$DEEP_DIR*.jpg"
wait
jpegoptim "$DEEP_DIR*.jpg" –max=70 --strip-all
fi
if [[ $FILE != */ ]]
then
RENAME=`echo ${FILE//\*/} | tr ' ' '_' `
mv -v "${DIR}${FILE//\*/}" "${DIR}${RENAME}"
FILE=$RENAME
RENAME2=`echo ${FILE//\*/} | tr '\*.JPEG' '\*.jpg' `
mv -v "${DIR}${FILE//\*/}" "${DIR}${RENAME2}"
FILE=$RENAME2
fi
fi
done
if [ "$FIRST_DIR" ]
then
mogrify -resize 750 "$DIR*.jpg"
wait
jpegoptim "$DIR*.jpg" –max=70 --strip-all
fi
下面是关于bash编程的几个好链接:
难道不应该用
DIR=$(ls-t1 | head-n1)
代替DIR=ls-t1 | head-n1
?@sgibb尝试过,但得到了相同的结果=没有结果操作ls-t1 | head-n1
(没有任何关于DIR的内容),产生了您期望的结果?我不习惯head-n1
语法,这是不是把它搞砸了?祝你好运。@sgibb你是对的,$()
是必需的(我检查过它对我有用)。也许OP的机器有一个不兼容版本的head
?谢谢Eric,我尝试了这个脚本,但我得到了很多错误:ls:无法访问3:没有这样的文件或目录:第15行:[:参数太多-第7行:[:参数太多了。基本上什么都没有发生。你在哪个操作系统上运行这个?@GrantUbuntu 11.10但最终会在CentOS@eric上运行问题是ls-lt1F上的l只要删除它,一切都会正常。所以第三行ls应该是ls-t1F@GrantTried,并得到以下内容:这里。/20120315-week\u 10\u 2012\u/brun/。/bash2.sh:linE15:[:参数太多。/bash2.sh:line 15:[:参数太多