我递归地处理目录,查找具有特定扩展名的文件并插入日期。我是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
答案 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”作为文件名。