dos2unix
Windows에서 Linux로 복사된 파일에 대한 작업을 수행하기 위해 스크립트에서 다음 명령을 사용하고 있습니다 . 파일 수가 많기 때문에 이 작업에는 시간이 꽤 오래 걸립니다.
이것을 최적화하기 위해 인터넷을 검색한 결과 xargs
with를 find
대신 사용하여 -exec
성능을 향상시킬 수 있다는 것을 알았지만 다음을 with로 사용하도록 변환하는 데 어려움을 겪고 있습니다 xargs
.
find /path_to_files/ -exec bash -c 'dos2unix -k -n "{}" tmp_file && mv tmp_file "{}"' \;
답변1
실제로는 훨씬 더 간단합니다. 플래그를 지정하지 않으면 개체 파일이 이미 수정되었기 mv
때문에 셸을 호출하거나 사용할 필요가 없습니다 .dos2unix
-n
find /path_to_files -type f -exec dos2unix -k -q -- {} +
-type f
이 방법으로 find는 디렉토리가 아닌 일반 파일만 검색합니다. 표준 출력에 정보 메시지를 쓰지 않도록 -q
플래그를 지정합니다 . 대신 우리는 발견된 각 파일에 대해 프로세스를 호출 하지 않고 인수( )만큼 많은 파일을 제공 하도록 find를 dos2unix
사용합니다 .{} +
{} \;
dos2unix
dos2unix file1 file2 file3 ...
Xargs는 추가 프로세스일 뿐이므로 추가 시간 패널티가 발생합니다. 가능하면 새 프로세스를 호출하지 마세요.
답변2
~/bin
파일 목록을 처리 하는 스크립트를 만들고 이름을 doit
, 다음을 포함합니다.
#!/bin/bash
while [[ $# -ne 0 ]] ; do
thisfile="$1"
shift
dos2unix -k -n "$thisfile" tmp_file
mv tmp_file "$thisfile"
done
그 다음에,
chmod +x ~/bin/doit
마침내,
find /path/to/files -type f -print0 | \
xargs -0 -r $HOME/bin/doit
읽다 man find xargs bash
.