2009-05-12 3 views
1

다음과 같이하고 싶습니다.find 명령의 "exec"기능이 백그라운드에서 프로그램을 시작할 수 있습니까?

find . -iname "*Advanced*Linux*Program*" -exec kpdf {} & \; 

가능합니까? 다른 유사한 방법을 사용할 수 있습니까?

+0

시도하면 어떻게됩니까? –

+0

당신은 '&'(즉 '\ &') – dsm

+0

@dsm을 이스케이프 처리 할 수 ​​있습니다. 작동하는 것처럼 보입니다. 그러나 {}에 의해 반환 된 파일 이름 중 일부에 공백과 명령 barfs가있는 또 다른 문제가 발생합니다. 그 주위에 쉬운 방법? – Duck

답변

12

, 당신이 입력 한대로 쉘이 존재하지 않는 명령 다음에 배경에서 잘못된 find 실행

find . -iname "*Advanced*Linux*Program*" -exec kpdf {} & 
\; 

,로 해석하기 때문에이 작동하지 않습니다 .

도 대신 (실제로는 배경 처리를 위해 &을 처리하는 것입니다) 쉘에주는 주어진 find -exec 실제로 exec의 인수 목록 때문에 작동하지 않습니다 탈출.

당신이것을 알고 일단의 문제가, 당신이해야 할 모든 쉘을 시작할있다가이 명령을주고 : 반면에

find . -iname "*Advanced*Linux*Program*" -exec sh -c '"$0" "[email protected]" &' kpdf {} \; 

, 당신이 무엇을에게 주어진 ' 할 노력하고, 당신의 데스크탑 환경 관련으로 기본 프로그램에서 파일을 엽니 다

find ... -exec kfmclient exec {} \; # KDE 
find ... -exec gnome-open {} \;  # Gnome 
find ... -exec xdg-open {} \;  # any modern desktop 

중 하나를 제안합니다.

+0

고맙습니다. kfmclinet/gnome-open은 필자가 필요로하는 것입니다. – Duck

+1

+1 우수함. 정보, 품질 및 안전 코드. 개인적으로 단일 위치 인수 만 지정할 때 "$ @"를 사용할 지 확신하지 못합니다. 나는 "$ 1"을 명시 적으로 사용하거나 \ 대신 \를 사용합니다. 'kpdf'가 지원한다면. – lhunath

1

당신의 목표는 단지 ​​자신의 별도의 인스턴스에서 각 PDF를 표시 반대로, 당신의 plussed 변형으로

find . -iname "*Advanced*Linux*Program*" -exec kpdf {} \+ & 

을 시도 할 수있는 다음 중 하나를보기 위해 하나의 PDF 파일을 닫을 필요가없는 경우 - exec는 xargs와 같은 커맨드 라인을 만들어서 찾은 모든 파일이 kpdf의 같은 인스턴스로 넘겨 질 것입니다. 결국 &은 전체 찾기에 영향을줍니다. 매우 많은 수의 파일이 발견되면 커맨드 라인이 너무 길어지기 때문에 일괄 적으로 열 수 있습니다. 그러나 시스템의 소비를 재조정하는 것과 관련하여 이것은 좋은 일일 수도 있습니다. ;)

kpdf는이 기능을 사용하기 위해 명령 줄에서 파일 목록을 가져올 수 있어야합니다. 직접 사용하지는 않기 때문에이 사실을 모릅니다.

관련 문제