该脚本也可以递归地适用于所有文件,但它不会命名之间有空格的文件。例如,它会抛出文件“this is a test.txt”或“test file.txt”的错误
知道如何修复它吗?
#!/bin/bash
dir="/data/"
#for filename in `ls -1t $dir/`
for filename in `find $dir -type f`
do
i=".`date -r $filename +%s`"
mv $filename $filename$i
done
答案1
试试这个:
#!/bin/bash
shopt -s globstar # require bash4 : recursive
dir="/data/"
for filename in $dir**; do
i=".$(date -r $filename +%s)"
mv "$filename" "$filename$i"
done
如果你没有 bash4 :
find "$dir" -type f -exec bash -c '
i=".$(date -r $1 +%s)"
mv "$1" "$1$i"
' -- {} \;
不要忘记用双引号引用每个变量!
看http://mywiki.wooledge.org/Quotes,http://mywiki.wooledge.org/Arguments和http://wiki.bash-hackers.org/syntax/words。
答案2
尝试使用 null 分隔的 while 循环(并记住引用所有变量扩展):
#!/bin/bash
dir="/data/"
while IFS= read -r -d '' filename
do
i="$(date -r "$filename" +%s)"
mv -- "$filename" "$filename.$i"
done < <(find "$dir" -type f -print0)