스크립트를 사용하여 공백이 있는 파일에 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/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)

관련 정보