유닉스에서 파일을 쓰는 데 문제가 있습니다
[ -s $PWD/MEN/*sub.wav ] && echo "File there" || echo "File Not there" > temp.csv
이 unix 명령을 시도 중이지만 temp.csv 파일이 기록되지 않습니다.
답변1
temp.csv
명령에 기록된 유일한 내용은 마지막 명령이며, echo
테스트 또는 첫 번째 테스트가 실패한 경우에만 실행됩니다.-s
echo
파일로 올바르게 출력하려면 다음을 수행하십시오.
if [ -s MEN/*sub.wav ]; then echo "File there"; else echo "File not there"; fi >temp.csv
또는 (정확히 동일하지는 않음),
[ -s MEN/*sub.wav ] && echo "File there" >temp.csv || echo "File not there" >temp.csv
또한 패턴이 MEN/*sub.wav
여러 파일 이름과 일치하는 경우 프로그램에서 구문 오류가 생성됩니다.
여부를 테스트하시겠습니까?마지막 하나이름이 패턴과 일치하고 비어 있지 않은 경우( -s
테스트) 다음을 사용하세요.
set -- MEN/*sub.wav
# Loop over the matching names (if any).
# Stop when we find a non-empty file.
while [ "$#" -gt 0 ] && [ ! -s "$1" ]; do
shift
done
if [ -s "$1" ]; then
echo File exists
else
echo File not there
fi >temp.csv
여부를 테스트하시겠습니까?모두패턴과 일치하는 이름이 비어 있지 않습니다.
set -- MEN/*sub.wav
# Loop over the matching names (if any).
# Stop when we find an empty file.
while [ "$#" -gt 0 ] && [ -s "$1" ]; do
shift
done
if [ "$#" -eq 0 ]; then
echo File(s) exists
else
echo File(s) not there
fi >temp.csv
코드의 마지막 부분은 만일의 경우에 확장되지 않은 패턴을 유지하기 위해 셸을 사용합니다.아니요이름이 일치합니다.
답변2
명령을 어기면 이는 동일합니다.
[ -s $PWD/MEN/*sub.wav ]
"$PWD"/MEN/*sub.wav 패턴이 여러 파일 이름과 일치하지 않으면 어쨌든 실행됩니다. 그러다가 왔어
echo "File There"
쉘은 이 명령을 실행하려고 시도합니다. 귀하의 경우에는 성공적으로 실행된 다음 나타납니다. ||
즉, 왼쪽 부분이 실패하면 오른쪽 부분이 실행됩니다. 왼쪽 부분이 실행되는 동안 오른쪽 부분은 실행되지 않습니다. 당신이 쓰고 싶다면파일이 거기 있어요temp.csv에 추가하면 명령은 다음과 같습니다.
[ -s $PWD/MEN/*sub.wav ] && echo "File there" > temp.csv || echo "File Not there" > temp.csv
아니면 이 두 부분을 쓰고 싶다면
[ -s $PWD/MEN/*sub.wav ] && echo "File there" > temp.csv && echo "File Not there" > temp.csv