파일 목록에 없는 파일을 찾으려면 grep 라인을 만들어 보십시오.

파일 목록에 없는 파일을 찾으려면 grep 라인을 만들어 보십시오.

이것은 무엇보다 어려운 일입니다. 한 줄로 안전하고 우아하게 수행할 수 있습니까?

가장 큰 문제는 패턴과 파일 모두 실패할 수 있는 명령의 결과라는 것입니다.

grep -Fxvf <(cmd-filter) <(cmd-list) | xargs -d "\n" gvfs-trash

  1. 잘못된 경로가 전달되면 cmd-filter는 0으로 실패하거나 거짓 빈 목록을 출력할 수 있습니다(가짜 원격 ls입니다).
  2. cmd-list는 단지 심층 검색일 뿐입니다. 여기서 실패가 모두 나쁜 것은 아닙니다. 오타라도 파이프로 연결된 출력을 수신할 다음 gvfs-trash 프로그램이 어떤 것에서도 실행되지 않는다는 것을 의미하기 때문입니다. 오타로 인해 오류가 발생하는 경우 유용합니다.

분명히 주요 문제는 첫 번째 문제입니다. 어떤 이유로든 실패하거나 오타로 인해 비어 있으면 cmd-list로 인쇄된 모든 파일이 삭제됩니다. 적어도 나는 이것을 피하고 싶습니다.

cmd-filter가 비어 있으면 grep이 실패해야 한다는 내용을 man에서 읽었지만 grep -f위에서는 이런 현상이 발생하지 않았습니다. cmd-filter로 바꾸면 echo ""cmd-list의 모든 파일을 가져옵니다. 다른 이유로 인한 실패는 어떻게 되나요?

편집: 생각해 보면 cmd-list에 없는 행을 가져오기 위해 일치를 반전시키는 데 필요한 -v 스위치 때문일 수 있습니다. 그렇다면 빈 패턴 목록의 역일치가 전부인 것을 발견하는 것이 이상하다고 생각합니다.

어쨌든 우아함은 아마도 불가능하고 좋은 응답이 없기 때문에 "그냥 게으른 뼈대가 스크립트를 만들도록 두는 것"보다는 tmp 파일이나 유사한 파일을 사용하여 올바른 한 줄 핵을 표시하겠습니다.

편집: 나는 이 도전에 "실패"했고시간이 오래 걸렸어요Script(ab)는 이를 달성하기 위해 변수와 프로세스 대체를 사용합니다. 오류 상태와 cmd-filter의 stdout이 비어 있는지 여부를 확인할 필요가 없다는 것이 밝혀졌습니다. 모든 오류 사례에서 stdout도 비어 있기 때문입니다.

관련 정보