【问题标题】:How to find a file path in a specific directory without knowing the file extension?如何在不知道文件扩展名的情况下找到特定目录中的文件路径?
【发布时间】:2022-01-27 09:20:51
【问题描述】:

我正在尝试检索名为 player.# 的文件的文件路径,其中数字是 1-20 之间的值。系统中的挂载点为/media/usb#,usb值范围为0-19。 usb 值与播放器值匹配。之后,我需要将文件扩展名从player.# 存储到一个变量中,以便稍后在脚本中使用。

到目前为止,我已经尝试过:

for x in range {0..19}
do
    DATA_DIR=/media/usb"$X"
    PLAYER_FILE_PATH=`find -type f -path $DATA_DIR -name 'player.*' -printf '%f'`
    PLAYER_FILE_ONLY='basename -- "$PLAYER_FILE_ONLY"`
    PLAYER_NUMBER=`echo "${PLAYER_FILE_ONLY##*.}"'
done

我收到一个空白的返回语句,或者说路径不存在的错误。该文件确实存在,但我不知道为什么它不起作用。


我让它工作了。我没有意识到find 函数对''"" 如此挑剔。另外,我对我需要的东西太具体了,所以将我的 find 函数更改为

PLAYER_FILE_PATH=`find $DATA_DIR -name "player.*"`

解决了问题!

【问题讨论】:

  • 你使用哪个外壳?
  • @Cyrus 我目前正在使用 MobaXterm。我通过 SSH 连接到一个 RPi。
  • 'player.*'"player.*" 是等价的。从一个换到另一个不会有什么不同。
  • 最好post the solution as an answer 而不是将其编辑到您的问题中。

标签: bash shell


【解决方案1】:

此解决方案假定您只有 1 个 player.# 文件。这是我的方法:我使用通配符而不是 find 命令:

#!/usr/bin/env bash
PLAYER_FILE_PATH=/media/usb*/player.*
PLAYER_FILE_ONLY=$(basename $PLAYER_FILE_PATH)
PLAYER_NUMBER=${PLAYER_FILE_ONLY##*.}

echo Player File Path: $PLAYER_FILE_PATH
echo Player File Only: $PLAYER_FILE_ONLY
echo Player Number: $PLAYER_NUMBER

样本输出:

Player File Path: /media/usb11/player.12
Player File Only: player.12
Player Number: 12

【讨论】:

    猜你喜欢
    • 2021-09-06
    • 1970-01-01
    • 2011-09-23
    • 1970-01-01
    • 1970-01-01
    • 2012-09-25
    • 1970-01-01
    • 2021-08-24
    • 2012-02-07
    相关资源
    最近更新 更多