![출력의 특정 부분을 선택하고 이를 사용하여 파일 이름을 바꿉니다.](https://rvso.com/image/1497067/%EC%B6%9C%EB%A0%A5%EC%9D%98%20%ED%8A%B9%EC%A0%95%20%EB%B6%80%EB%B6%84%EC%9D%84%20%EC%84%A0%ED%83%9D%ED%95%98%EA%B3%A0%20%EC%9D%B4%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%ED%8C%8C%EC%9D%BC%20%EC%9D%B4%EB%A6%84%EC%9D%84%20%EB%B0%94%EA%BF%89%EB%8B%88%EB%8B%A4..png)
현재 손상된 파일 시스템에서 복구한 파일을 정렬하고 있습니다. 이제 모두 f123123123.xls와 같은 파일 이름을 갖습니다.
"f123123123.xls" 파일을 실행하면 많은 정보가 표시되고 때로는 마지막으로 저장된 날짜도 표시됩니다.
예:
./recup_dir.89/f111841280.xls: Composite Document File V2 Document, Little Endian, Os: Windows, 버전 1.0, 코드 페이지: -535, 개정 번호: 5, 총 편집 시간: 09:58:37, 마지막 인쇄: 2015년 9월 9일 수요일 11:57:04, 생성 시간/날짜: 2015년 9월 3일 목요일 03:15:36, 마지막으로 저장된 시간/날짜: 2015년 10월 19일 월요일 14:28:03
마지막으로 저장된 날짜를 선택하고 이를 사용하여 파일 이름을 Oct-19-2015.xls와 같은 이름으로 바꾸려면 어떻게 해야 합니까?
답변1
이를 수행하기 위해 몇 가지 명령을 함께 연결할 수 있습니다. 이 예제에서는 이름이 변경된 파일을 다른 디렉토리에 쓰도록 할 것입니다. 원하는 위치로 이동할 수 있지만 개인적으로 몇 번 잘못 시작하는 경우를 대비해 별도로 보관하고 싶습니다.
mkdir renamed
for recovered in recup_dir.89/*xls; do
new_name=$(date +'%b-%d-%Y' -d "$(file "$recovered"| grep -Po 'Last Saved Time/Date:\K[^,]*')")
if [ -n "$new_name" ]; then
mv "$recovered" "renamed/$new_name.xls"
fi
done
이는 디렉토리의 모든 xls 파일에 대해 반복됩니다(이 정보는 모든 파일의 출력에 포함되지 않기 때문입니다). 각각에 대해 명령을 실행 file
하고 GNU grep의 perl 스타일 정규식을 사용하여 나타나는 위치를 찾은 Last Saved Time/Date:
다음 그 이후의 시간을 가져옵니다. 그런 다음 명령을 사용하여 date
해당 시간을 원하는 대로 다시 포맷하므로 출력에서 개별 필드를 많이 조작할 필요가 없습니다.
그러면 형식의 날짜가 제공되고 예상한 대로 Oct-19-2015
해당 값을 명령에 사용 하지만 실제로 날짜를 얻은 경우에만 가능합니다. mv
무언가를 되찾지 못했다면 파일 이름을 바꾸려고 하지 마세요(단, 이전 명령 체인으로 일이 항상 올바른 방식으로 작동하지 않는 경우를 대비해).