【问题标题】:Bash script to organize files based on their name用于根据文件名称组织文件的 Bash 脚本
【发布时间】:2020-11-02 14:09:33
【问题描述】:

我需要帮助设置一个 bash 脚本,以根据文件名称的开头(直到第一个 .)将文件移动到文件夹,例如:

  • aaa.123.txt
  • aaa.124.txt
  • aaa.156.txt
  • aaa.122.txt
  • bbb.1424.txt
  • bbb.13.txt
  • bbb.13.txt
  • ccc.222.txt

这将生成以下文件夹,其中包含适当的文本文件

  • aaa/
    • aaa.123.txt
    • aaa.124.txt
    • aaa.156.txt
    • aaa.122.txt
  • bbb/
    • bbb.1424.txt
    • bbb.13.txt
    • bbb.13.txt
  • ccc/
    • ccc.222.txt

【问题讨论】:

  • for i in *.*.txt; do d=${i%%.*}; mkdir -p "$d"; mv "$i" "$d"; done 这不会为您创建任何文件夹,但您可能想说“目录”。
  • @WilliamPursell 区分术语 folderdirectory 是不必要的,只是令人困惑 - 这有什么影响?
  • @alecxs 我不同意。文件夹是 gui 的产物。在物理世界中,文件夹包含文件。目录没有。认为目录包含文件是常见的基本误解之一。
  • 这种错误信念的影响是什么?我读了this 仍然不明白,这种知识没有任何好处
  • “没有好处”!?严重地?您没有看到了解文件系统如何工作的好处吗?你没有看到误解它的危害吗?查看 iTunes 并观察它因迎合这种误解而造成的磁盘资源的惊人浪费。处理文件的能力是计算机的核心目的之一。不了解该系统的工作原理会导致效率低下、不优雅的解决方案。 “文件夹”这个词是由市场营销部门引入的,在与 gui 无关的技术讨论中没有位置。

标签: regex bash


【解决方案1】:

给你。

MYDIR="${PWD}";

for FLE in ${MYDIR}/*.txt;
do
FNAME=$(echo $(basename ${FLE}) | cut -d "." -f 1);

mkdir ${FNAME};

mv ${FLE} ${FNAME};

done

${PWD} 更改为应有的路径。或者只是从文件所在的目录执行脚本。

【讨论】:

  • 将 ${PWD} 更改为任何应有的路径。 带空格的路径除外
猜你喜欢
  • 1970-01-01
  • 2021-12-26
  • 2017-06-22
  • 2014-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-07
  • 1970-01-01
相关资源
最近更新 更多