Bash

使用萬用字元移動文件?

  • August 17, 2020

哦,我已經閱讀了幾頁和問題,但我無法理解/完全理解它……

jdir0="$@"  # /home/tor/subbackup/teest2/jjj
mv  "$jdir0/subs/*.srt" /home/tor/subbackup/

mv: cannot stat ‘/home/tor/subbackup/teest2/jjj/.srt’: 沒有這樣的文件或目錄*

嗯,呃,是的,那裡有一個 test2.srt ..

我看過幾頁有很多不同的解決方案,據我所知,這應該翻譯成(第一個移動命令):

mv /home/tor/subbackup/teest2/jjj/subs/test2.srt /home/tor/subbackup/

這個在終端上工作正常..

(第一個移動命令),但我無法讓它在腳本中工作..我做錯了什麼?

jdir0="$@"

"$@"擴展到腳本的所有位置參數/參數。當您將其分配給單個變數時,Bash 將它們與空格連接起來。你可能只想在$1這裡。

mv "$jdir0/subs/*.srt"

確實應該引用變數擴展,因為它可以防止分詞,並且如果變數包含看起來像 glob 的東西,則進行通配。但是在這裡,您可能希望硬編碼的 glob 能夠工作,因此不應引用它。

所以把星號放在引號外面,例如

mv "$jdir0"/subs/*.srt

或者例如

mv "$jdir0/subs/"*.srt

兩者的工作方式相同,請使用對您來說更好的變體。

引用自:https://unix.stackexchange.com/questions/604983