![如何移动所有内容以0开头的文件?](https://linux22.com/image/226239/%E5%A6%82%E4%BD%95%E7%A7%BB%E5%8A%A8%E6%89%80%E6%9C%89%E5%86%85%E5%AE%B9%E4%BB%A50%E5%BC%80%E5%A4%B4%E7%9A%84%E6%96%87%E4%BB%B6%EF%BC%9F.png)
这是一个移动所有文件的命令姓名以 0 开头进入名为 Zero 的文件夹:
mv [0]* zero
问题:移动所有文件的命令是什么内容以 0 开头进入名为 0 的文件夹?
希望有一个简短的命令也能做到这一点。
我知道文件内容的第一个字符由 给出head -c 1 filename
。
答案1
没有命令可以执行此操作。然而,这是一个简单的脚本。
弄清楚如何通过文件内容识别文件并移动它:
f=example_file.txt b=$(head -c1 <"$f") [ "$b" = "0" ] && echo mv -- "$f" zero/
计算出如何迭代目录中的所有 100,000 个文件:
find . -maxdepth 1 -type f -print
或者,也许您的 shell 允许您对大量条目使用通配符,并且更简单、更明显的循环将起作用:
for f in * do echo "./$f" done
弄清楚如何
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
优化
find
版本:find -maxdepth 1 -type f -exec sh -c ' for f in "$@" do [ "$(head -c1 "$f")" = "0" ] && echo mv -- "$f" zero/ done ' _ {} +
在所有情况下,删除echo
以更改命令,从告诉您它将做什么,到执行它。