Linux용 Windows 하위 시스템의 명령줄에서 이 스크립트를 실행했습니다. 최신 파일을 검색하고 싶지만 "해당 파일이나 디렉터리가 없습니다"라는 오류가 발생합니다. 스크립트를 작동시키려면 어떻게 변경해야 하는지 궁금합니다.
이것은 내 스크립트입니다.
# Set the path to the directory where you want to search for the latest file
directory="C:/Users/nguyen_q/Downloads/Test files/*.csv"
# Get the current date in the format YYYY-MM-DD
echo CURRENT_DATE=$(date +%Y%m%d)
# Set the variable to hold the name of the latest file
latest_file=""
# Find all files in the specified directory whose name starts with "MNSUP"
echo files="$(find "$directory" -maxdepth 1 -name "MNSUP*")"
# Sort the files by modified time, with the most recently modified file first
echo files="$(ls -t $files)"
# Set the first file in the list as the latest file
echo latest_file="$(echo "$files" | head -n 1)"
# Check if the latest file contains the current date in the file name
if [[ "$latest_file" == *"$CURRENT_DATE"*.csv ]]; then
# Print a message if the latest file matches the current date
echo "$latest_file TODAYYYYY."
else
# Print a message if the latest file does not match the current date
echo "$latest_file"
# Send an email to the user
echo "The latest file is not present and was not sent to MN.Please re run the job" | mail -s "Latest File Error" "[email protected]"
fi
# Print the latest file
# echo "The latest file currently in the folder is: $latest_file"```
답변1
짧은 요약:
변화:
directory="C:/Users/nguyen_q/Downloads/Test files/*.csv"
도착하다
directory="/mnt/c/Users/nguyen_q/Downloads/Test files/*.csv"
설명하다:
전체 스크립트를 테스트하지 않으면 이 No such file or directory
메시지는 초기 find
명령에서 나오는 것이 거의 확실합니다.
문제는 WSL을 실행할 때리눅스, Windows와는 완전히 다른 방법으로 파일과 디렉터리에 액세스합니다.
directory="C:/Users/nguyen_q/Downloads/Test files/*.csv"
...Windows 경로입니다. Linux에는 드라이브 개념이 C:\
없습니다 . C:/
Windows 백슬래시를 슬래시로 변환하려고 시도한 것을 확인했습니다. 이는 좋은 시작이지만 경로가 여전히 작동하지 않습니다.
이것을 테스트하는 것이 가장 쉽습니다아니요스크립트를 사용하려면 Bash 셸에서 다음 명령을 실행하세요.
directory="C:/Users/nguyen_q/Downloads/Test files/*.csv"
ls $directory
여전히 No such file or directory
오류가 발생합니다.
당신이해야 할 일은 다음을 통해 디렉토리에 액세스하는 것입니다.산WSL은 예를 들어 각 Windows 드라이브에 대해 자동으로 생성됩니다 C:\
. 이는 (기본적으로) 다음과 같습니다:
/mnt/c
따라서 다음을 시도해 보십시오.
directory="/mnt/c/Users/nguyen_q/Downloads/Test files/*.csv"
ls $directory
이것은 작동합니다. 그런 다음 그에 따라 스크립트를 업데이트할 수 있습니다.
참고: Windows 드라이브의 파일은 현재 WSL2에서 액세스할 수 있습니다.상당히Linux ext4 파일 시스템에서 WSL이 직접 생성한 파일보다 느립니다.
더 많은 정보를 알고 싶다면:
- 마이크로소프트 문서:Windows 및 Linux 파일 시스템에서 작동
- 우분투에 물어보세요:내 컴퓨터에서 WSL은 어디에 있나요?
- U&L에서는 좋은 중복 질문을 찾을 수 없었지만 Stack Exchange에는 몇 가지 다른 질문이 있습니다.