我在要移动到不同目录的子目录中有一堆文件。
这些目录组织在一个父目录中,如下所示:Apr1995 Apr1996 Aug1995 等...(月份和年份)
以 /Files/Apr1995 为例。
这些文件的格式如下 1995___.info 或 1995___.dat
我想进入每个子目录并将文件移动到不同的目录,其中子目录按年份分隔,然后格式化。像这样的东西:
OtherFiles/1995/info、OtherFiles/1995/dat、OtherFiles/1996/info 等。
1995 目录将包含名为 info 和 dat 的子目录
最后,我想要这个组织,例如:
桌面/文件/Apr1995/1995__.info,
桌面/文件/Apr1995/1995__.dat,
桌面/其他文件/1995/信息,
Desktop/OtherFiles/1995/dat 等
我已经尝试了很多选项,比如几个单衬里:
for d in ./*/ ; do (cd "$d" && mv 1995*.info /1995/info); done
或者
find ./ -type f -execdir mv 1995*.info /1995/info {} \;
我只是收到 mv 错误,或者它无法识别它们是那些文件。
shell 脚本也可以提供帮助。
对于看起来相对容易的事情,我有点不知所措。任何帮助,将不胜感激。
编辑:希望添加的信息可以提供帮助
您的第二个命令将起作用,但您没有指定文件名。如果您想移动与
1995_.info
和/或模式匹配的所有文件1995_.dat
find ./ -type f -name 1995*.info -exec mv {} /1995/info \;
find ./ -type f -name 1995*.dat -exec mv {} /1995/dat \;
如果您想在一个命令中完成所有年份:
for y in {1995..1999}; do $(find Years -type f -name $y*.info -exec mv {} '/'$y'/info' \;); done
for y in {1995..1999}; do $(find Years -type f -name $y*.dat -exec mv {} '/'$y'/dat' \;); done
这将遍历每年的目录并找到文件名并将它们移动到它们的年度目录。
旁注:我在 CentOS 7.4 中测试并确认了这一点,但根据环境,您可能需要转义,
*
以便在其前面添加反斜杠:\*