Linux와 커맨드 라인 기초

$ ls
a.log  b.log  notes.txt
$ for f in *.log; do mv "$f" "${f%.log}.txt"; done

위의 조작 후에 디렉터리에 있는 파일로 올바른 것은?

  1. Aa.log.txt, b.log.txt, notes.txt
  2. Ba.log, b.log, notes.txt 그대로이며, a.log와 b.log 안의 '.log'라는 문자열이 '.txt'로 치환된다
  3. Ca.txt, b.txt, notes.txt
정답과 해설 보기

정답: C. a.txt, b.txt, notes.txt

for f in *.log는 *.log에 일치하는 a.log와 b.log를 하나씩 변수 f에 넣고 do와 done 사이를 반복합니다. ${f%.log}는 f의 값 끝에서 .log를 제거한 문자열이므로 a.log라면 a가 되며, mv "$f" "${f%.log}.txt"는 a.log의 이름을 a.txt로 바꿉니다. notes.txt는 *.log에 일치하지 않으므로 그대로 남습니다. "$f"를 큰따옴표로 감싸는 것은 이름에 공백이 포함되어 있어도 하나의 인수로 mv에 넘기기 위해서입니다.

이 분야 연습하기 분야로 돌아가기

Linux와 커맨드 라인 기초의 다른 문제

  1. 현재 디렉터리에 있는, 실행 권한이 붙은 스크립트 run.sh를 'run.sh'라고 입력하여 실행하려고 하면 'command not found'가 되고, './run.sh'라고 입력하면 실행할 수 있었다. 이유로 올바른 것은?
  2. 위의 명령을 순서대로 실행했을 때, 두 bash -c의 출력의 조합으로 올바른 것은?
  3. Linux의 패키지 관리 시스템(Debian 계열의 apt, Red Hat 계열의 dnf 등)의 주된 역할로 올바른 것은?
  4. systemd를 사용하는 Linux에서, 서비스 license.service에 대한 'systemctl start license.service'와 'systemctl enable license.service'의 차이로 올바른 것은?
  5. cron에 '30 2 * * 1 /home/alice/backup.sh'를 등록했다. backup.sh가 실행되는 시점으로 올바른 것은?