Linux find exec - 다른 디렉토리로 출력

Linux find exec - 다른 디렉토리로 출력

일부 csv 파일을 편집하기 위해 짧은 스크립트를 작성하려고 합니다. 먼저 구분 기호를 바꾼 다음 인코딩을 UTF-16으로 변경해야 합니다. 이 작업을 두 단계로 수행하여 문제가 발생할 경우를 대비해 결과를 두 개의 다른 폴더에 저장하고 싶습니다.

첫 번째 단계(구분 기호 교체)는 다음과 같이 해결했으며 꽤 잘 작동합니다.

mkdir ./01_delimiters
find .  -maxdepth 1 -type f -name '*.csv' -exec bash -c 'sed -e "s/|/¦/g" -e "s/╬/|/g" "{}" > ./01_delimiters/"{}"' \;

이제 01_delimiters 폴더에서 모든 파일을 가져와 인코딩을 변경하고 ./02_encoding 폴더에 저장하고 싶습니다. 다음의 몇 가지 버전을 시도했지만 작동하지 않습니다.

mkdir ./02_encoding
find ./01_delimiters -maxdepth 1 -type f -name '*.csv' -exec bash -c 'iconv -f utf-8 -t utf-16BE "{}" > ./02_encoding/"{}"' \;

파일에 문제가 없음을 발견했지만 출력에 "해당 파일 또는 디렉터리가 없습니다"라는 오류가 발생합니다. 이 작업을 수행하는 방법에 대한 아이디어가 있습니까? 그런데 저는 우분투를 사용하고 있습니다. 미리 감사드립니다!

답변1

{}전체 경로로 대체됩니다 . 경로가 단지 이기 때문에 이것은 첫 번째 명령에서 작동합니다 ./file.csv. 두 번째 명령에서는 이름이 ./01_delimiters/file.csv이므로 ./02_encoding/./01_delimiters/file.csv.

당신은 할 수

  • mkdir /02_encoding/./01_delimiters을 클릭하면 출력 파일이 해당 디렉터리에 저장됩니다.
  • 첫 번째 작업이 올바르게 작동하는지 확인한 후 두 작업을 하나로 병합합니다. 문제가 발생하더라도 원본 파일을 삭제하지 않았습니다.
  • 두 번째 명령을 다음으로 변경하십시오.

    (cd ./01_delimiters; find . -maxdepth 1 -type f -name '*.csv' -exec bash -c 'iconv -f utf-8 -t utf-16BE "{}" > ../02_encoding/"{}"' \; )
    
  • 그냥 쉘을 사용하세요

    for file in *.csv; do
      sed -e "s/|/¦/g" -e "s/╬/|/g" "$file" > "./01_delimiters/$file"
      iconv -f utf-8 -t utf-16BE "./01_delimiters/$file" > "./02_encoding/$file"
    done
    

관련 정보