スクリプトを使用して、空白のあるファイルに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/Quoteshttp://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)

関連情報