将日期注入文件名

时间:2014-01-02 21:12:48

标签: bash

我递归地处理目录,查找具有特定扩展名的文件并插入日期。我是BASH的新手,我已经厌倦了接近但不太完全的解决方案。

for file in $(find $1 -name '*.xyz')
do
  echo "Modifying $file";

  ***CHANGE file here.  For example $file = file1.xyz.  move this to "file1_140102.xyz"***

done

4 个答案:

答案 0 :(得分:1)

for file in *.txt
do
  echo "Modifying $file"

  name=`echo "$file" | cut -d'.' -f1`
  ext=`echo "$file" | cut -d'.' -f2`
  mv $file "$name"_`date +%Y%m%d`".$ext"
done

答案 1 :(得分:1)

请勿在for循环中使用命令替换,原因如下所述:http://mywiki.wooledge.org/ParsingLs。使用while循环。

假设您要在文件扩展名之前添加当前日期,您可以

find "$1" -type f -name '*.xyz' -print0 | while IFS= read -r -d '' filename; do
    extension="${filename##*.}"
    no_ext="${filename%.*}"
    mv "$filename" "${no_ext}_$(date +%y%m%d).${extension}"      
done

答案 2 :(得分:1)

我没有对此进行测试,但它应该可行,你可以这样做:

    DATE=`date "+%y%m%d"`

    for file in $(find "$1" -name '*.xyz'); 
    do 

       echo "Modifying $file";
       BASE=`basename $file .xyz`;
       mv ./$file ./$BASE_$DATE.xyz;
    done

答案 3 :(得分:1)

如果您使用的是bash 4或更高版本,则此处不需要find;您可以使用globstar选项。

for f in "$1"/**/*.xyz; do
    mv "$f" "${f%.xyz}_$(date +%y%m%d).xyz"
done

作为品味,您还可以使用以下内容作为新文件名:

"$(date +${f%.xyz}_%y%m%d.xyz)"

日期格式实际上是一个任意字符串,其中扩展了percent-escapes,因此您可以将“date”作为文件名。