숫자 목록을 반환하는 Linux 명령이 있습니다. 이제 디렉터리 경로를 형성하고 해당 경로에 있는 파일을 캡처하려면 이 숫자가 필요합니다. 예: myCommand는 다음을 반환합니다.
1
10
30
40
다음과 같은 모든 파일을 캡처하고 싶습니다.
/folder/1/folder2
/folder/10/folder2
/folder/30/folder2
/folder/40/folder2
내가 원하는 것이 무엇인지 알기를 바랍니다. 그렇지 않다면 언제든지 문의해 주세요. 이것은 내 현재 코드입니다.
myCommand | xargs cat
그러나 디렉토리 1,10,30 및 40이 존재하지 않기 때문에 분명히 작동하지 않습니다.
나는 출력을 다음과 같이 하고 싶습니다: catted value - myCommand에 의해 생성된 숫자
답변1
일을 하는 데에는 문제가 없습니다xargs
myCommand | xargs -I{} sh -c 'echo -n {}\ ; cat /folder/{}/folder2/file'
그러나 for
루프를 사용하는 것이 구문적으로 더 정확하고 유연합니다.
for genpath in $(myCommand)
do
echo -n $genpath\
cat /folder/$genpath/folder2/file
done
아니면 while
루프를 통해서라도
while read genpath
do
echo -n $genpath\
cat /folder/$genpath/folder2/file
done < <(myCommand)
답변2
-I
with를 사용하여 xargs
명령의 자리 표시자를 바꿀 수 있습니다 .
myCommand | xargs -I % cat /folder/%/folder2
답변3
대괄호 목록 확장을 사용하여 명령 대체를 시도할 수 있습니다.
cat /folder/["$(myCommand)"]/folder2
printf
명령의 예:
$ mkdir dir1 dir2 dir3
$ echo a > dir1/file
$ echo b > dir2/file
$ echo c > dir3/file
$ cat ./dir["$(printf "%s\n" {1..3})"]/file
a
b
c