Bash: 특수 문자가 많이 포함된 파일 목록 복사

Bash: 특수 문자가 많이 포함된 파일 목록 복사

나는 bash를 사용하여 파일 목록을 다른 위치로 간단히 복사하는 방법을 잘 알고 있지만 문제는 내 파일 목록에 bash에서 이스케이프해야 하는 모든 문자가 포함된 파일 이름이 포함되어 있다는 것입니다. !, ",", "'", ? 등 수많은 공백이 있으며, 생각할 수 있는 거의 모든 문자를 이스케이프해야 합니다.

처음에는 텍스트 파일을 살펴보고 이러한 문자를 모두 이스케이프 처리하는 데 지쳤지만 검색 및 바꾸기를 사용해도 지쳤습니다(그러나 작동합니다)(훨씬 더 작은 파일 목록으로 테스트했습니다.). 또한 단일 파일을 추가해 보았습니다. 경로 앞과 뒤에 텍스트 파일에 따옴표가 있지만 작동하지 않습니다. 또한 cp 뒤에 % 뒤에 작은 따옴표를 추가하려고 시도했지만 분명히 내가 무엇을 하고 있는지 전혀 모릅니다. :) (파일 경로를 작은따옴표로 묶으려면 텍스트 파일에서 작은따옴표를 이스케이프해야 한다는 것을 알고 있습니다.)

이 명령을 사용하여 파일 목록을 다른 위치에 복사하고 있는데 다시 특수 문자와 함께 작동하지 않습니다.

cat file.txt | xargs -J % cp % ./folderToMoveto/

나는 xargs에 아무것도 파이프하지 않고도 동일한 작업을 수행하는 다른 명령이 있다는 것을 알고 있으며 여기에 대한 일부 답변은 xargs가 자체적으로 수행할 수 있다고 말하지만 위의 명령은 작동하지만 작동하도록 하지 못했습니다.

또한 저는 OS X를 사용하고 있습니다.

답변1

GNU xargs에는 -0널바이트로 구분된 데이터를 읽을 수 있는 옵션이 있습니다. Linux에서는 다음을 수행할 수 있습니다.

tr '\n' '\0' < file.txt | xargs -0 cp -t /folder/to/move/to

안타깝게도 Apple은 기존 Darwin 매뉴얼 페이지 사이트를 오프라인으로 전환했기 때문에 MacOS에 해당하는 페이지가 있는지 확인할 수 없습니다.

관련 정보