이전 명령의 출력을 다음 명령의 매개변수로 전달하는 방법

이전 명령의 출력을 다음 명령의 매개변수로 전달하는 방법

한 명령의 출력을 다른 명령에 매개 변수로 전달하는 방법을 찾는 데 문제가 있습니다.

특히 FreeBSD의 파일에 대한 확장 속성 목록을 전달하고 싶습니다.lsextattr, 출력을 다음으로 전달합니다.rextattr모든 확장된 속성을 제거합니다. 예, rmextattr에는 재귀 옵션이 없기 때문에 이 작업을 수행해야 합니다...

나는 이와 같은 것을 시도하고 있지만 운이 없습니다.

# lsextattr -q user some_file.txt | rmextattr user "$1" some_file.txt 
rmextattr: some_file.txt: failed: Attribute not found

lsextattr이 제대로 작동하는 것 같은데 출력이 rmextattr에 제대로 전달되지 않습니다.

# lsextattr -q user some_file.txt
DosStream.com.apple.lastuseddate#PS:$DATA   DosStream.AFP_AfpInfo:$DATA

도와주세요......

답변1

IIUC에서는 rmextattr한 번에 하나의 확장 속성만 얻을 수 있습니다. 따라서 반환된 확장 속성을 반복 lsextattr하고 다음과 같이 각각을 제거해야 합니다.

for attr in $(lsextattr -q user some_file.txt) ;do
    rmextattr user $attr some_file.txt
done

(테스트되지 않았습니다. 현재 FreeBSD 시스템에 액세스할 수 없습니다.)

댓글의 질문에 답해 주세요.

for file in $(find ...) ;do
    for attr in $(lsextattr -q user $file) ;do
        rmextattr user $attr $file
    done
done

고려하려는 파일에 대한 기준이 무엇인지는 모르지만 find원하는 목록을 얻을 때까지 실험한 다음 결과 명령을 $(find ...)외부 루프 부분에 삽입할 수 있습니다.

관련 정보