如何移动所有内容以0开头的文件?

如何移动所有内容以0开头的文件?

这是一个移动所有文件的命令姓名以 0 开头进入名为 Zero 的文件夹:

mv [0]* zero

问题:移动所有文件的命令是什么内容以 0 开头进入名为 0 的文件夹?

希望有一个简短的命令也能做到这一点。

我知道文件内容的第一个字符由 给出head -c 1 filename

答案1

没有命令可以执行此操作。然而,这是一个简单的脚本。

  1. 弄清楚如何通过文件内容识别文件并移动它:

    f=example_file.txt
    b=$(head -c1 <"$f")
    [ "$b" = "0" ] && echo mv -- "$f" zero/
    
  2. 计算出如何迭代目录中的所有 100,000 个文件:

    find . -maxdepth 1 -type f -print
    

    或者,也许您的 shell 允许您对大量条目使用通配符,并且更简单、更明显的循环将起作用:

    for f in *
    do
        echo "./$f"
    done
    
  3. 弄清楚如何mv为每个可能的文件运行代码:

    find -maxdepth 1 -type f -exec sh -c '
        b=$(head -c1 "$1")
        [ "$b" = "0" ] && echo mv -- "$1" zero/
    ' _ {} \;
    

    或者

    for f in *
    do
        [ "$(head -c1 "$f")" = "0" ] && echo mv -- "$f" zero/
    done
    
  4. 优化find版本:

    find -maxdepth 1 -type f -exec sh -c '
        for f in "$@"
        do
            [ "$(head -c1 "$f")" = "0" ] && echo mv -- "$f" zero/
        done
    ' _ {} +
    

在所有情况下,删除echo以更改命令,从告诉您它将做什么,到执行它。

相关内容