다른 디렉토리의 파일에 ls를 쓰는 Bash 스크립트

다른 디렉토리의 파일에 ls를 쓰는 Bash 스크립트

ls특정 디렉터리, 해당 디렉터리의 파일로 이동한 다음 다른 디렉터리의 파일에 쓰는 스크립트를 작성하려고 합니다 . 지금까지 내가 생각해낸 내용은 다음과 같습니다.

#!/bin/bash
getDisk1(){
   cd cwiczenia | ls >> cd /home/kai/listaplikow.txt
   return
}

getDisk2(){
   cd Pictures | ls >> cd /home/kai/listaplikow.txt
   return
}

getDisk1
getDisk2

폴더에서 스크립트를 실행 중이지만 /home/kai/대상 getDisk2에 결과가 기록되지 않습니다. 누구든지 이 문제를 해결하도록 도와줄 수 있나요?

답변1

당신의 명령은 말도 안 돼요.

  cd Pictures | ls >> cd /home/kai/listaplikow.txt

" Pictures디렉터리를 입력하세요. 명령의 (빈) 출력을 표준 입력을 사용하지 않는 cd으로 파이프합니다. ' 출력을 이름이 지정된 파일로 보냅니다 ."lslscd

아마도 당신이 원하는 것은 다음과 같습니다:

( cd Pictures; ls >> /home/kai/listaplikow.txt )

이것이 괄호 안에 있는 이유는 하위 쉘에서 실행되고 기본 스크립트의 작업 디렉토리를 변경하려고 시도하지 않기 때문입니다.

그럼에도 불구하고 ls일반 출력을 구문 분석하는 것은 나쁜 생각입니다. 다음과 같이 하는 것이 더 좋습니다:

find Pictures/ -maxdepth 1 >> /home/kai/listaplikow.txt

파일이 있는 경로를 보고 싶지 않다면 다음을 find사용하여 실제로 파일 목록을 얻는 것이 좋습니다.

find Pictures/ -maxdepth 1 -print0 | xargs -0 -L1 basename >> /home/kai/listaplikow.txt

답변2

구문을 변경하십시오.

cd cwiczenia | ls >> cd /home/kai/listaplikow.txt

도착하다

cd cwiczenia && ls >> /home/kai/listaplikow.txt

설명하다:

  • &&: 이 명령을 실행하기 전에 이전 명령이 cd성공했는지 확인하세요.ls

관련 정보