我在 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 时,您处于Linux,它使用与 Windows 完全不同的方式来访问文件和目录。
directory="C:/Users/nguyen_q/Downloads/Test files/*.csv"
...是 Windows 路径。 Linux 没有C:\
(甚至C:/
)驱动器的概念。我看到您尝试将 Windows 反斜杠转换为正斜杠,这是一个很好的开始,但路径仍然无效。
测试这个是最简单的没有只需在 Bash shell 中运行以下命令即可使用脚本:
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
这应该有效。然后您可以相应地更新您的脚本。
请注意: 当前可以从 WSL2 访问 Windows 驱动器上的文件显著地比 WSL 直接在 Linux ext4 文件系统中创建的文件慢。
了解更多信息:
- 微软文档:跨 Windows 和 Linux 文件系统工作
- 询问Ubuntu:WSL 位于我的计算机上的什么位置?
- 尽管我在 U&L 上找不到好的重复问题,但 Stack Exchange 上还有其他几个问题。