我有一个目录,里面装满了与这些类似的文件:
3260_661901_2008-2008.dat
3260_661901_2009-2009.dat
3260_661901_2010-2010.dat
3260_661901_2011-2011.dat
3260_661901_por-1998.dat
3260_662336_1999-1999.dat
3260_662336_2000-2000.dat
3260_662336_2001-2001.dat
3260_662336_2002-2002.dat
Run Code Online (Sandbox Code Playgroud)
我想在文件名中的第 6 个和第 7 个字符之后将文件拆分为目录名称,如下所示:
66/3260_661901_2008-2008.dat
66/3260_661901_2009-2009.dat
66/3260_661901_2010-2010.dat
66/3260_661901_2011-2011.dat
67/3260_671901_por-1998.dat
67/3260_672336_1999-1999.dat
67/3260_672336_2000-2000.dat
88/3260_882336_2001-2001.dat
88/3260_882336_2002-2002.dat
Run Code Online (Sandbox Code Playgroud)
是否有一个快速的 liner 命令可以用来创建子目录并将文件移动到其中?
我应该提到该目录中有超过 33k 个文件。
假设你正在使用bash
你可以运行
for f in *.dat; do mkdir -p "${f:5:2}"; mv "$f" "${f:5:2}/"; done
Run Code Online (Sandbox Code Playgroud)
或(如果有太多文件for f in *.dat
无法工作)
while read f; do mkdir -p "${f:5:2}"; mv "$f" "${f:5:2}/"; done < ls
Run Code Online (Sandbox Code Playgroud)