按文件中的列表移动文件(带前导空格)

Nir*_*Nir 18 shell-script rename files

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

/tmp/list.txt (每行开头都有空格):

  /tmp/file.log
  /app/nir/home.txt
  /etc/config.cust
Run Code Online (Sandbox Code Playgroud)

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

所以它应该是这样的:

cat /tmp/list.txt | xargs mv /app/dest/
Run Code Online (Sandbox Code Playgroud)

Ant*_*hon 29

您只是缺少(假设 GNU )的-t选项:mvmv

cat /tmp/list.txt | xargs mv -t /app/dest/
Run Code Online (Sandbox Code Playgroud)

或更短(受 X Tian 的回答启发):

xargs mv -t /app/dest/ < /tmp/list.txt
Run Code Online (Sandbox Code Playgroud)

前导(和可能的尾随)空格被删除。文件名中的空格会导致问题。

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

sed 's/^ *//' < /tmp/list.txt | xargs -d '\n' mv -t /app/dest/
Run Code Online (Sandbox Code Playgroud)


ter*_*don 8

假设您的文件名相对合理(没有换行符或奇怪的字符):

while read file; do mv "$file" /app/dest/; done < list.txt 
Run Code Online (Sandbox Code Playgroud)

处理奇怪的文件名(如果文件名有换行符,则会中断):

while IFS= read -r file; do mv "$file" /app/dest/; done < list.txt 
Run Code Online (Sandbox Code Playgroud)