读取文本文件并仅将这些文件移动到另一个文件夹

读取文本文件并仅将这些文件移动到另一个文件夹

我有一个文件夹,里面有 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

看起来您将-fGNU 选项mv-t选项混淆了,这正是您想要的,以便将多个源移动到单个目标xargs

   mv [OPTION]... -t DIRECTORY SOURCE...

请注意,plainxargs将输入中断为空格分隔的参数,因此如果任何文件名包含空格,您的命令就会中断。同时它也是一个乌鲁木齐大学

所以

xargs -d'\n' mv -t /root/testing2/moved/ </root/testing2/goodfiles.txt

相关内容