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

时间:2019-10-02 14:53:09

标签: shell xargs mv

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

值得注意的是: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!

2 个答案:

答案 0 :(得分: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”模式。

答案 1 :(得分:0)

使用GNU Parallel,您可以执行以下操作:

cat FILENAME.txt | parallel mv {} NEW-FOLDER

GNU Parallel的好处之一是可以正确处理以下文件名:

My brother's 12" records cost > $1000.txt
相关问题