また、スクリプトはすべてのファイルに対して再帰的に機能しますが、間にスペースがあるファイル名は指定しません。たとえば、「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)