상황:
한 폴더에서 크기가 0보다 큰 모든 odt 파일을 다른 폴더로 복사하고 싶습니다. 파일 이름에는 다음 문자가 포함됩니다: + % & [ ( 및 공백.
내 시도는 다음과 같습니다.
#!/bin/bash
mvfunc ()
{
if [ -s "$1" ]; then
cp -n "$1" /home/telas/zztmp/currentfiles/
/usr/bin/truncate -s 0 "$1"
return 0
fi
}
fileslist=$(ls --quoting-style=shell-always /home/telas/zzz/workingfiles/*.odt)
for filename in "$fileslist" ; do
mvfunc "$filename"
done
모든 도움에 크게 감사드립니다!
답변1
경로 이름 확장(와일드카드)와 같은 외부 명령에 의존하는 것보다 Bash에서 ls
.
for
루프에 와일드카드가 포함된 경우 Bash는 기본적으로 와일드카드를 사용하므로 특수 문자는 주어진 인수를 명령 대체로 해석하여 생성된 텍스트 문자열로 복잡해지지 않습니다.
--quoting-style=
그리고 옵션이 GNU ls에만 적용되므로 코드가 더 깔끔하고 이식성이 뛰어납니다 .
#!/bin/bash
mvfunc ()
{
if [ -s "$1" ]; then
cp -n "$1" currentfiles
/usr/bin/truncate -s 0 "$1"
return 0
fi
}
for filename in /home/telas/zzz/workingfiles/*.odt; do
mvfunc "$filename"
done