xargs -a [文件] mv -t [新目录]给我mv:无法统计`filename *':没有这样的文件或目录错误

问题描述 投票:0回答:1

我一直在尝试运行此命令(之前我已经在其他目录中运行过,并且我在留言板上阅读的所有内容都无法解决我的未知问题。

注意:1)文件存在于此目录中2)我具有在这些文件之间移动的适当权限3)我之前已经运行过此确切的代码行,并且已经起作用。 4)我尝试列出带有和不带有''的文件以捕获所有文件(请参见下文)。 5)我也厌倦了将每个文件都列为“ Sample1,但这没有用。

xargs -a [filename.txt] mv -t [new-directory]

我有文件开头(每个文件开头都有〜5个文件,我想移动与该文件开头相关的所有文件。

示例:Sample1.bam Sample1.sorted.bam,依此类推文件中的各行如下列出:样本1 *样品2 *Sample3 * ... etc。

我做错了什么,如何解决?TIA!

shell xargs mv
1个回答
0
投票

当您使用'xargs'参数执行命令时,参数会直接传递给被调用的程序(在您的情况下为'mv')。输入中的通配符模式不会扩展-“ sample1 *”原样传递给“ mv”,这会发出一条错误消息,提示音符的文件名为“ sample1 *”。

要扩展文件名,您想使用外壳程序。处理这种情况的一种方法是

xargs -a FILENAME.TXT -I__ sh -c "mv -t NEW-FOLDER -- __"

安全说明:该代码提供了一些防止命令行注入的保护(例如,文件名以“-”开头)。但是,其他可能的攻击也是可能的。更安全的版本是

cat FILENAME.txt | grep '^[A-Za-z0-9][A-Z-z0-9._-]*$' | xargs I__ sh -c "mv -t NEW-FOLDER -- __"

会将输入限制为使用字母数字文件。 'grep'模式可以根据需要扩展模式。

© www.soinside.com 2019 - 2024. All rights reserved.