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


12

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

/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/

Answers:


21

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

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

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

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

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

如果文件名中包含空格或制表符或引号或反斜杠,则假定xargs使用GNU ,则可以使用:

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

谢谢您的回答。这样,我就可以列出许多文件名称为[!]的文件,然后移动到另一个文件夹,如下所示:grep -e“。[!]]” | 发球001.txt; sed's / ^ * //'<001.txt | xargs -d'\ n'mv -t / destinypath /
inukaze

6

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

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

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

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

嗨,terdon,如何根据csv文件中的匹配项将文件夹移动到新目录?您能帮我吗[ unix.stackexchange.com/questions/433068/…谢谢!
user3351523 '18

@ user3351523您的问题已关闭。向随机的人寻求帮助不会改变这一点。相反,请编辑问题,并说明重复项中的解决方案对您没有帮助。如果某些事情“行不通”,请说明失败的方式。这些解决方案应该适合您,因此您需要解释一下尝试时会发生什么。
terdon

我做到了 你可以看看。
user3351523 '18

@ user3351523您还没有解释为什么骗子的解决方案对您而言失败。而且您还没有解释您得到的答案是如何失败的。您可能只需要使用,cp -Hr但我不知道OSX是否cp支持该功能。
terdon


1

纯xargs直接从文件读取

xargs -l -i < flist  mv -v {} /app/dst

编辑1-在下面的@Anthon的评论之后,

xargs -I{} < flist  mv -v {} /app/dst

1
-i被弃用,或者被替换-I暗示-l/ --max-lines=1。并且它导致mv分别为每个文件执行。
Anthon 2014年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.