ls를 어떻게 사용하나요? Bash 변수의 옵션?

ls를 어떻게 사용하나요? Bash 변수의 옵션?

ls를 사용하고 싶나요? Bash 변수의 옵션.

동일한 작업을 수행하도록 스크립트를 어떻게 얻을 수 있습니까 ls -lt foobar_??????.log?

$ cat foobar_ls.sh 

#!/bin/bash
FOOBAR_LIST="foobar_??????.log"
ls -lt "$FOOBAR_LIST"

이것은 프롬프트 버전입니다:

$ls -lt foobar_??????.log
-rw-r--r-- 1 foobar foobiz 0 Nov  1 14:58 foobar_000003.log
-rw-r--r-- 1 foobar foobiz 0 Nov  1 14:58 foobar_000002.log
-rw-r--r-- 1 foobar foobiz 0 Nov  1 14:58 foobar_000001.log

이것은 내 버전의 스크립트입니다.

$ ./foobar_ls.sh 

ls: cannot access foobar_??????.log: No such file or directory

답변1

?함수가 아니라 ls셸의 함수입니다.파일 이름 확장자또는 와일드카드 확장 또는 패턴 일치 또는와일드카드. ls일치하는 파일 이름 목록을 받으려면 쉘에서 와일드카드 확장을 수행해야 합니다 .

변수에 와일드카드 문자가 포함된 문자열이 있고 해당 와일드카드 문자를 일치하는 파일 이름으로 확장하려면 변수 대체를 따옴표 없이 그대로 두세요. 이것은 "split+glob" 연산자입니다. 값은 공백으로 구분된 부분으로 분할되고, 각 부분은 일치하는 파일 이름 목록으로 대체되지만, 파일 이름과 일치하지 않는 부분은 변경되지 않은 채 유지됩니다.

FOOBAR_LIST="foobar_??????.log"
ls -lt $FOOBAR_LIST

답변2

이것은 나에게 효과적이었지만 수행 중인 작업에 따라 해당 변수를 따옴표로 묶지 않은 상태로 두는 것이 좋지 않을 수 있습니다. 아마도 다음 이외의 다른 것을 사용해야 할 것입니다 ls. http://mywiki.wooledge.org/ParsingLs

foobar_ls.sh

#!/bin/bash
FOOBAR_LIST="foobar_??????.log"
ls -lt ${FOOBAR_LIST}

이러한 파일의 이름을 바꾸려면 다음 중 하나를 수행할 수 있습니다.

shopt -s nullglob
for file in /path/to/files/foobar_??????.log; do
        mv "$file" "${file}.old"
done
shopt -u nullglob

또는

find /path/to/files -type f -name 'foobar_??????.log' -exec mv {} {}.old \;

관련 정보