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
으로 파이프합니다. ' 출력을 이름이 지정된 파일로 보냅니다 ."ls
ls
cd
아마도 당신이 원하는 것은 다음과 같습니다:
( 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