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 \;