유닉스에서 파일에 쓰기

유닉스에서 파일에 쓰기

유닉스에서 파일을 쓰는 데 문제가 있습니다

[ -s $PWD/MEN/*sub.wav ] && echo "File there" || echo "File Not there" > temp.csv

이 unix 명령을 시도 중이지만 temp.csv 파일이 기록되지 않습니다.

답변1

temp.csv명령에 기록된 유일한 내용은 마지막 명령이며, echo테스트 또는 첫 번째 테스트가 실패한 경우에만 실행됩니다.-secho

파일로 올바르게 출력하려면 다음을 수행하십시오.

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

관련 정보