我有一個腳本,它從由空格分隔的 tsv 檔案中獲取源和目標資訊。第一串列示源檔案路徑,第二串列示目標。我的 rsync 命令讀取源和目標資訊并執行復制操作。
但問題是源檔案和目標檔案都包含帶空格的檔案名(header-background copy.jpg),正如我們所知,當 bash shell 讀取檔案名(帶空格)時,它會用反斜杠后跟空格“\ ”
/data-prod/bigdata/abc/test/1143-1003-004_1143-1003-905/static/common/images/header-background copy.jpg /mapped-data/data20/data3/header-background copy.jpg
我的問題是如何用“\”替換空格以便shell可以讀取它。我嘗試使用以下 sed 命令
sed -r 's/^\s //;s/\s /\\ /g' test2.tsv
但是有一個問題,因為上面的 sed 命令還在源路徑后添加了一個反斜杠。正如我所提到的,我的腳本從 .tsv 檔案中獲取源和目標資訊,因此添加斜杠是一個問題。下面是 sed 命令的輸出。
/data-prod/bigdata/abc/test/1143-1003-004_1143-1003-905/static/common/images/header-background\ copy.jpg\ /mapped-data/data20/data3/header-background\ copy.jpg
我想要的是像隱蔽的東西
/data-prod/bigdata/abc/test/1143-1003-004_1143-1003-905/static/common/images/header-background copy.jpg /mapped-data/data20/data3/header-background copy.jpg
到
/data-prod/bigdata/abc/test/1143-1003-004_1143-1003-905/static/common/images/header-background\ copy.jpg /mapped-data/data20/data3/header-background\ copy.jpg
uj5u.com熱心網友回復:
tsv 檔案以空格分隔
至少使用 a tab,因為 atab比 a 更不可能出現在路徑中space。
備注:你知道在 Linux 檔案系統中,只有 /和\0(NULL 位元組)是檔案名的禁止字符嗎?這意味著除了\0可以出現在路徑中的所有內容...
假設您的檔案現在已被tab分隔,并且您的路徑不包含newlines也不包含tabs. 以下是在 BASH 中閱讀它的方法:
while IFS=$'\t' read filepath1 filepath2
do
declare -p filepath1 filepath2
done <<< "/data-prod/bigdata/abc/test/1143-1003-004_1143-1003-905/static/common/images/header-background copy.jpg"$'\t'"/mapped-data/data20/data3/header-background copy.jpg"
輸出:
declare -- filepath1="/data-prod/bigdata/abc/test/1143-1003-004_1143-1003-905/static/common/images/header-background copy.jpg"
declare -- filepath2="/mapped-data/data20/data3/header-background copy.jpg"
如果您需要顯式轉義變數,則可以使用printf '%q'
filepath1="/data-prod/bigdata/abc/test/1143-1003-004_1143-1003-905/static/common/images/header-background copy.jpg"
filepath2="/mapped-data/data20/data3/header-background copy.jpg"
rsync -av "$filepath1" user@server:"$(printf '%q' "$filepath2")"
uj5u.com熱心網友回復:
使用sed,一種方法是對匹配項進行分組,并使用附加反斜杠的反向參考回傳它
sed 's/\([A-Za-z0-9\/][^\.]*\) /\1\\ /g' input_file
/data-prod/bigdata/abc/test/1143-1003-004_1143-1003-905/static/common/images/header-background\ copy.jpg /mapped-data/data20/data3/header-background\ copy.jpg
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/344777.html
上一篇:如何列出numpy陣列中的最低值
