
저는 현재 UNIX bash를 사용하고 있으며 파일 경로 이름의 정보를 사용하여 날짜 항목을 수정할 수 있는 쉘 스크립트를 작성하고 싶습니다.
배경: 이전에는 디렉토리에 배치되지 않은 200개의 파일이 있었습니다. 내 스크립트를 완성한 후 자동으로 각 파일의 첫 번째 줄(YY/MM/DD)을 찾아 각 파일을 연도 디렉터리에 넣은 다음 월 및 일 하위 디렉터리에 넣습니다. 예를 들어, 2002/12/19는 2002라는 디렉터리에 저장되고, 그 다음에는 12라는 하위 디렉터리, 19라는 또 다른 하위 디렉터리에 저장됩니다. 각 파일에는 4개의 정보가 있습니다. 날짜는 항상 첫 번째 줄입니다. 예 Pic912831 (파일 이름) 2005/02/23 수요일 2월 바르셀로나 파일의 첫 번째 줄이 대부분의 다른 파일과 다르기 때문에 디렉토리에 아직 저장되지 않은 파일이 많다는 것을 알고 있습니다. 디렉터리와 일치하지 않는 파일 중 하나를 살펴본 결과 날짜는 "2005-02-23"이고 일치하는 파일은 "2004/05/14"인 것을 확인했습니다. 이 경우에는 다음을 사용해야 할 것 같습니다.
tr '-' '/'
내 요구 사항과 해야 할 일:
- 올바르지 않거나 일치하지 않는 모든 파일을 식별합니다.
- 임시 파일에 올바른 첫 번째 줄을 에코합니다(내 생각에는 연도?).
- 기존 파일의 마지막 3줄(일, 월, 위치)을 추가합니다.
- 임시 파일을 이동하여 기존 파일 덮어쓰기
물론 나는 이것이 사실이라는 것을 이해합니다.
echo $directory > temp tail -3 $file >> temp mv temp $file
파일 이름을 변경할 필요는 없습니다. 잘못된 파일을 식별하고 위의 단계를 수행하기만 하면 됩니다. 나는 일을 깔끔하게 유지하기 위해 일치하지 않는 파일을 YY-MM-DD가 아닌 YY/MM/DD 형식으로 만들고 싶습니다. 요약하자면, 파일과 일치하지 않는 날짜 항목을 수정하는 스크립트를 작성하고 싶습니다.
답변1
날짜 구조에 대한 정보가 필요하지 않은 경우(예: 항상 YYYY/MM/DD 또는 YYYY-MM-DD 형식인 경우) 매우 간단한 명령을 사용하여 전체 파일의 첫 번째 줄을 수정할 수 있습니다. 디렉토리 트리 .
find . -type f -exec sed -i '1 s:-:/:g' {} \;
sed -i
파일을 바로 편집할 수 있으므로 연결하거나 이동할 필요가 없습니다.'1 ...
각 파일의 첫 번째 줄만 편집하십시오.'s:-:/:g'
줄에서 "-"의 모든 인스턴스를 "/"로 바꿉니다.
그런 다음 원본 스크립트를 다시 실행하고 파일을 올바른 날짜 디렉터리로 정렬할 수 있습니다.