Filenames
如何將文件名中的“/”替換為“_”
我正在創建每個掛載點的備份 tar 文件:
/var /usr/image /usr/image/temp
我正在嘗試創建像
backup_var_date.tar backup_usr_image_date.tar backup_usr_image_temp_date.tar
嘗試類似下面但“mv”不起作用“$i 是一個在 for 循環中呼叫的變數”
/bin/tar -cvpzf backup_`echo`mv "$i" "${i//"/"/_}``_`hostname`.`date +%m.%d.%Y`.tar.gz
這看起來很奇怪:
backup_`echo`mv "$i" "${i//"/"/_}``_`hostname`.`date +%m.%d.%Y`.tar.gz
你想
mv
在echo
這裡築巢嗎?命令替換的$(...)
語法將使嵌套更容易:backup_$(echo $(mv this that))_$(hostname)...
但是我仍然看不到
mv
這裡有任何用處,更不用說echo
which 只會重複mv
輸出什麼,如果它有效,它不應該輸出任何東西。我們可以直接取消
mv
, 並使用 建構文件名,這將更改變數中的${var//\//_}
所有實例。/``_
那麼,對於整個循環,也許是這樣的:
for path in /var /usr/image /usr/image/temp ; do x=$(path#/} # remove leading / if there is one tarfile=backup_${x//\//_}_$(hostname)_$(date +%Y-%m-%d).tar.gz tar -cvpzf "$tarfile" "$path" done
注意:我將日期格式從更改為
05-17-2017
,2017-05-17
因為後者使排序更容易。刪除前導/
是多餘的,因為無論如何它都會變成_
我們想要的,但我發現這種方式更有條理。