Shell-Script

在文件中按列表移動文件(帶前導空格)

  • December 15, 2020

我有一個包含文件名的文件。例如:

/tmp/list.txt(每行開頭都有空格):

 /tmp/file.log
 /app/nir/home.txt
 /etc/config.cust

我想用一行將列出的所有文件移動/tmp/list.txt/app/dest

所以它應該是這樣的:

cat /tmp/list.txt | xargs mv /app/dest/

您只是缺少(假設 GNU )的-t選項:mv``mv

cat /tmp/list.txt | xargs mv -t /app/dest/

或更短(受 X Tian 的回答啟發):

xargs mv -t /app/dest/ < /tmp/list.txt

前導(和可能的尾隨)空格被刪除。文件名中的空格會導致問題。

如果文件名中有空格、製表符、引號或反斜杠,假設 GNUxargs可以使用:

sed 's/^ *//' < /tmp/list.txt | xargs -d '\n' mv -t /app/dest/

假設您的文件名相對健全(沒有換行符或奇怪的字元):

while read file; do mv "$file" /app/dest/; done < list.txt 

處理奇怪的文件名(如果文件名有換行符則中斷):

while IFS= read -r file; do mv "$file" /app/dest/; done < list.txt 

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