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
选项:mv
mv
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)
假设您的文件名相对合理(没有换行符或奇怪的字符):
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)