我有一个文件夹,里面有 100 个日志文件,其中一些有数据,有些没有。我有一个脚本,可以挑选出带有数据的文件,并将名称保存在名为“goodfiles.txt”的文本文件中。我想知道如何读取文本文件中的文件并将它们移动到另一个文件夹。我已经尝试过这个:cat /root/testing2/goodfiles.txt | xargs mv -f /root/testing2/moved/
但它给了我一个错误说
mv: 目标 (log1508.log) 必须是一个目录才能将
mv: 目录或多个文件移动到其中。
有人可以帮帮我吗?
答案1
这是一种略有不同,但概念上简单的方法(避免使用管道):
for fileName in `cat goodfiles.txt`; do mv $fileName /root/testing2/moved/; done
答案2
我认为记住您可以使用 --replace 选项更改 xargs 替换的部分并指定替换字符串会有所帮助。否则它会将该行附加到末尾。
我能够做大致相同的事情
cat filelist |xargs --replace='{}' mv {} ./targetdir/
对你来说也许可以尝试
cat /root/testing2/goodfiles.txt |xargs --replace '{}' /root/testing2/moved
答案3
看起来您将-f
GNU 选项mv
与-t
选项混淆了,这正是您想要的,以便将多个源移动到单个目标xargs
mv [OPTION]... -t DIRECTORY SOURCE...
请注意,plainxargs
将输入中断为空格分隔的参数,因此如果任何文件名包含空格,您的命令就会中断。同时它也是一个乌鲁木齐大学。
所以
xargs -d'\n' mv -t /root/testing2/moved/ </root/testing2/goodfiles.txt