![스크립트를 사용하여 공백이 있는 파일에 Unix 타임스탬프를 추가합니다.](https://linux55.com/image/35264/%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EA%B3%B5%EB%B0%B1%EC%9D%B4%20%EC%9E%88%EB%8A%94%20%ED%8C%8C%EC%9D%BC%EC%97%90%20Unix%20%ED%83%80%EC%9E%84%EC%8A%A4%ED%83%AC%ED%94%84%EB%A5%BC%20%EC%B6%94%EA%B0%80%ED%95%A9%EB%8B%88%EB%8B%A4..png)
또한 스크립트는 모든 파일에 대해 재귀적으로 작동하지만 사이에 공백이 있는 파일 이름은 지정하지 않습니다. 예를 들어 "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)