2012-03-15 20 views
1

如何列出最新的目录,并添加为变量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 '\*.JPEG' '\*.jpg' ` 
done 
    mogrify -resize 750 *.jpg 
wait 
    jpegoptim *.jpg –max=70 --strip-all 
exit 

我也想递归处理的文件,有可能是在子的最上一层目录。

基本上将bash脚本保存在目录的根目录下,并处理所有最新的目录和子目录文件。

OK我修改剧本,以这样的:

#!/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变量。

+1

不应该'DIR = LS-T1 | head -n1'被替换为'DIR = $(ls -t1 | head -n1)'? – sgibb 2012-03-15 17:06:30

+0

@sgibb尝试过,但得到相同的结果=没有结果 – Grant 2012-03-15 19:50:34

+0

做你的操作'ls -t1 | head -n1'(没有涉及DIR的任何事情),产生你期望的结果?我不习惯'head -n1'的语法,是不是吹了它?祝你好运。 – shellter 2012-03-15 20:53:50

回答

0

此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编程好的链接:

http://tldp.org/LDP/abs/html/comparison-ops.html

http://tldp.org/LDP/abs/html/string-manipulation.html

+0

感谢埃里克为此我尝试了脚本,但我得到了很多错误:ls:无法访问3:没有这样的文件或目录:第15行:[:太多的参数 - 第7行:[:太多的参数。基本上没有任何反应。 – Grant 2012-03-15 19:54:06

+0

你正在使用哪个操作系统? @Grant – 2012-03-15 19:58:18

+0

Ubuntu 11.10但最终会在CentOS上运行@Eric – Grant 2012-03-15 20:02:15

相关问题