簡體   English   中英

Bash:無法從“讀取”命令變量中擴展文件名中的通配符

[英]Bash: can't expand wildcard in filename from "read" command variable

我已經用盡了所有可能的搜索。

我正在嘗試使用read從 CLI 讀取文件名/路徑,以便我可以鏈接文件以進行批量排序。 我已經嘗試了從引號到無的各種方法,嘗試使用 eval 進行擴展等等。 他們都沒有工作。

這是我當前狀態的腳本:

#!/bin/bash
read -p "from? (explicit, folder/) " -e from
read -p "to? (explicit, folder/) " -e to
read -p "base filename before ep name? " -e formatOldStart
read -p "base filename after ep name? " -e formatOldEnd

...

  lnFrom=$from$formatOldStart$currentEpisodeNumber$formatOldEnd

  echo $lnFrom

  #ln "$lnFrom" "$lnTo"

這是一個示例用法:

$ from? (explicit, folder/) $HOME/archive/_DATA_ARCHIVE/.data/Example\ Complete\ Series\ +\ Movies\ \[Dual\ Audio\]/Example\ \[Dual\ Audio\ DVD\ 480p\]/
$ to? (explicit, folder/) $HOME/archive/_DATA_ARCHIVE/_video_storage/Anime/Shows/Example/Season\ 1/
$ base filename before ep name? \(Hi10\)_Example_-_
$ base filename after ep name? _(DVD_480p)_(a-S)_(*).mkv

然后是輸出:

$HOME/archive/_DATA_ARCHIVE/.data/Example Complete Series + Movies [Dual Audio]/Example [Dual Audio DVD 480p]/(Hi10)_Example_-_015_(DVD_480p)_(a-S)_(*).mkv

這是預期的輸出:

/home/user/archive/_DATA_ARCHIVE/.data/Example Complete Series + Movies [Dual Audio]/Example [Dual Audio DVD 480p]/(Hi10)_Example_-_015_(DVD_480p)_(a-S)_(6852D8ED).mkv

在手動插入通配符(不是正則表達式)和本文建議的文件名,我只能獲得預期的輸出,但這顯然意味着每次我想將它用於沒有自動的新文件夾時,我都必須手動編輯此腳本-完全的。 我有很多東西要分類,所以這是不可能的。

編輯:采用不同的方法后,我想出了一個更簡單的單行代碼,主要用於選項卡完成(當然直到變量):

for index in {28..54}; do ln "/home/user/archive/_DATA_ARCHIVE/.data/Example Complete Series + Movies [Dual Audio]/Example [Dual Audio DVD 480p]/(Hi10)_Example_-_0${index}_(DVD_480p)_(a-S)_("*").mkv" "/home/user/archive/_DATA_ARCHIVE/_video_storage/Anime/Shows/Example/Season 2/Example S2E0${index}.mkv"; done

所以我有人幫忙,謝天謝地我能夠解決它。

首先,我們在read命令中使用-r來不解析轉義字符。

然后我們分配lnFromlnTo不帶引號:

lnFrom=$from$formatOldStart$currentEpisodeNumber$formatOldEnd
lnTo=$to$formatNewStart$currentEpisodeNumber$formatNewEnd

然后我們在ln命令上使用eval來解析變量:

eval ln "$lnFrom" "$lnTo"

現在是的,我理解eval問題,因為它是一個安全問題,但是這個腳本在我家的封閉網絡上運行,所以我不在乎。

如果有人可以提供無需 eval 即可工作的解決方案,我將非常樂意接受該答案。

對不起,如果這對你們中的很多人來說很明顯。 我在工作中熟悉 JavaScript,但除了繞過操作系統的基本命令之外,我對 bash/unix 並不十分熟悉。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM