2017-10-17 1 views
0

타임 스탬프가있는 주어진 문자열로 이름을 바꿔야하는 파일 디렉터리가 있습니다.for 루프는 파일을 삭제하는 대신 이름을 바꿉니다.

for file in itvl_* 
do 
    mv "$file" "Interval_$(stat -c %Y "$file" | date +%Y%m%d%H%M%S).Interval_001" 
done 

나는 주어진 마스크 ​​itvl_의 *에 맞게 파일의 디렉토리에있는 스크립트를 실행, 그것은 하나의 파일이 있지만 모두 제거하고 성공적으로 이름을 바꿉니다

나는 다음과 같은 코드를 사용 그룹의 마지막 파일

여기에 무슨 일이 일어날 수 있습니까?

+2

"초"는 파일을 구별하기에 충분하지 않습니다. bash는 아마도 같은 초에 모든 파일의 이름을 변경하여 동일한 파일 이름으로 많은 파일을 생성합니다. – Raizuri

+1

'date'는 표준 입력에서 읽지 않습니다; 현재 수행중인 작업은 새 파일 이름에 현재 날짜/시간을 사용하는 것뿐입니다. 당신은'date'에 대한 인수로'stat'의 결과를 사용하기 위해'$ (date + % Y % m % d % H % M % S --date $ (stat -c % Y "$ file")) '. – chepner

답변

1

모든 파일이 삭제되는 것은 아니며 모든 파일의 이름이 동일한 대상 이름으로 바뀝니다.

당신은 실행하여 볼 수 있습니다

for file in itvl_* 
do 
    echo "Interval_$(stat -c %Y "$file" | date +%Y%m%d%H%M%S).Interval_001" 
done 

결과는 그들이 서로를 무시하고 마지막 하나가 남아 있다는 것입니다.

관련 문제