Shell-Script
在文件中按列表移動文件(帶前導空格)
我有一個包含文件名的文件。例如:
/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
前導(和可能的尾隨)空格被刪除。文件名中的空格會導致問題。
如果文件名中有空格、製表符、引號或反斜杠,假設 GNU
xargs
可以使用: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