使用脚本将 unix 时间戳附加到带有空格的文件

使用脚本将 unix 时间戳附加到带有空格的文件

该脚本也可以递归地适用于所有文件,但它不会命名之间有空格的文件。例如,它会抛出文件“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/Argumentshttp://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)

相关内容