如何在 WSL 中正确设置本地 Windows 目录?

如何在 WSL 中正确设置本地 Windows 目录?

我在 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 文件系统中创建的文件慢。

了解更多信息:

相关内容