AWK-创建新的子目录并根据文件名将文件移动到该子目录中

djsmiley2kStaysInside

我有加载(大约6000个!)的mp3,我想根据文件名将其转储到子目录中。目前,它们都在一个子目录中。(已经有一些艺术家的现有目录,我不希望接触其中的文件,但是覆盖现有文件的副本是可以的)。

我看到的最简单的方法是,基于文件名创建一个子目录,因为文件都被命名为artist.artist.album.track.mp3。

经过一番搜索,我想出了:

for x in ./*.mp3; do awk x="${x}" -F. '{split(x,a,"."); mkdir a[1]; mv x a[1]/}'; done

但是它告诉我存在语法错误和未终止的正则表达式:

awk: cmd. line:1: x=./Dizzee.Rascal.Radio.1.Live.Lounge.03.That.s.Not.My.Name.mp3
awk: cmd. line:1:   ^ syntax error
awk: cmd. line:1: x=./Dizzee.Rascal.Radio.1.Live.Lounge.03.That.s.Not.My.Name.mp3
awk: cmd. line:1:     ^ unterminated regexp
awk: cmd. line:1: x=./Dizzee.Rascal.Ultimate.Streetdance.CD1.03.Flex.Dave.Spoon.Mix.mp3
awk: cmd. line:1:   ^ syntax error
awk: cmd. line:1: x=./Dizzee.Rascal.Ultimate.Streetdance.CD1.03.Flex.Dave.Spoon.Mix.mp3
awk: cmd. line:1:     ^ unterminated regexp

我认为这是因为文件名未在语音标记内给出,但我不确定100%吗?

有人可以帮忙吗?如果可以打印出进度,也可以加分。

卡米尔·马乔洛夫斯基(Kamil Maciorowski)

为什么awk呢?好吧,让我们假设awk...

  • x="${x}"在您想要成为程序之前-v(例如-v x="${x}"),否则它将被解释为程序。这就是您收到语法错误的原因。
  • 您的实际程序不是要按输入行执行,而是awk要按调用执行;所以你需要BEGIN
  • 你可能不是故意a[1]; 也许吧a[2]
  • 未加引号/(即在上下文中未加引号awk,而不是外壳程序)是错误的。
  • mkdir并且mv不是中的动作awk我认为它们被解释为(空)变量。system动作,您可以使用它。但是由于您需要传递一个任意的文件/目录名称,因此会出现以下问题:

    • 正确报价;
    • 命令注入漏洞(文件名的一部分可能被解释为命令)。

我说忘了awk这里。下面的代码假定您要使用前两个以句点分隔的段命名的目录。笔记:

  • 名为的文件foo.mp3将触发来自的错误mkdir -p ./foo.mp3/
  • 修改代码非常容易,因此它使用一个,三个或另一个固定数量的点分隔段。

for x in ./*.mp3; do

   # remove leading ./
   d="${x#./}"

   # first segment
   d1="${d%%.*}"

   # remainder
   d="${d#*.}"

   # second segment
   d2="${d%%.*}"

   #result
   d="./${d1}.${d2}/"

   mkdir -p "$d" && mv "$x" "$d"
done

无论如何,我建议创建一个单独的目录来使用:

cp -al my_music/ my_music_copy/
cd my_music_copy/

这使用硬链接,因此速度很快,几乎不需要额外的磁盘空间。处理内部的目录结构my_music_copy/如果您搞砸了,总是可以摆脱my_music_copy/并重新开始。只有在确定所有内容都在里面后my_music_copy/,才将删除my_music/并重命名my_music_copy/my_music/


如果没有固定数量的段,并且需要一些启发式方法,请尝试vidir; 像这样的东西:

find . -maxdepth 1 -type f -iname '*.mp3' | EDITOR=vi vidir -

然后,你可以使用“查找和替换”功能所选择的编辑器来可靠地创建所需的目录(如更换./Dizzee.Rascal../Dizzee.Rascal/;但./Mozart../Mozart/./W.A.Mozart../W.A.Mozart/或可能与./Mozart/为好)。看到我的这个答案

好处:

  • 如果出现问题,请不要保存文件。中止并重新开始。
  • 您不需要一次处理所有文件。您未触摸的文件(行)将不会被移动。处理一小块,以确保这部分是正确的。保存,退出编辑器。再次调用该命令以处理剩余文件。
  • 您可以将数据复制到另一个工具(例如电子表格),在那里进行处理,粘贴,保存并退出。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

遍历子目录并对某些文件执行awk脚本

来自分类Dev

遍历子目录并对某些文件执行awk脚本

来自分类Dev

在主目录中创建命名为文件的子目录,并将文件移动到相应的子目录

来自分类Dev

awk 创建目录,然后创建带有 zip 的子目录

来自分类Dev

将多个文件移动到Linux中的子目录

来自分类Dev

将多个文件移动到Linux中的子目录

来自分类Dev

将.txt文件移动到子目录中

来自分类Dev

将所有文件移动到文件名开头的子目录中

来自分类Dev

将所有文件移动到以部分文件名命名的子目录中

来自分类Dev

将所有文件和目录移动到Windows中的新子目录

来自分类Dev

在子目录中递归移动文件

来自分类Dev

在子目录中创建同名文件

来自分类Dev

创建子目录并根据文件名中的日期按日期组织文件

来自分类Dev

子目录中的文件?

来自分类Dev

将目录中的所有文件移动到同一目录中的新子目录

来自分类Dev

创建一个批处理文件以将照片从多个目录移动到该目录拥有的子目录中

来自分类Dev

从所有子目录移动特定文件,并根据子目录重命名

来自分类Dev

Linux循环将文件移动到其子目录

来自分类Dev

无法将文件移动到其自身的子目录

来自分类Dev

无法将文件移动到其自身的子目录

来自分类Dev

如何将某些文件移动到子目录?

来自分类Dev

将文件从子目录递归移动到父目录中的文件夹

来自分类Dev

将子目录中的文件移动到另一个目录

来自分类Dev

如何将文件从子目录移动到Merurial的父目录中

来自分类Dev

如何将子目录中的所有文件递归移动到单个目录?

来自分类Dev

如何将子目录中的所有文件递归移动到单个目录?

来自分类Dev

将子目录中的文件移动到另一个目录

来自分类Dev

将包含文件的目录排序并移动到子目录中

来自分类Dev

查找文件,创建子目录并移动

Related 相关文章

  1. 1

    遍历子目录并对某些文件执行awk脚本

  2. 2

    遍历子目录并对某些文件执行awk脚本

  3. 3

    在主目录中创建命名为文件的子目录,并将文件移动到相应的子目录

  4. 4

    awk 创建目录,然后创建带有 zip 的子目录

  5. 5

    将多个文件移动到Linux中的子目录

  6. 6

    将多个文件移动到Linux中的子目录

  7. 7

    将.txt文件移动到子目录中

  8. 8

    将所有文件移动到文件名开头的子目录中

  9. 9

    将所有文件移动到以部分文件名命名的子目录中

  10. 10

    将所有文件和目录移动到Windows中的新子目录

  11. 11

    在子目录中递归移动文件

  12. 12

    在子目录中创建同名文件

  13. 13

    创建子目录并根据文件名中的日期按日期组织文件

  14. 14

    子目录中的文件?

  15. 15

    将目录中的所有文件移动到同一目录中的新子目录

  16. 16

    创建一个批处理文件以将照片从多个目录移动到该目录拥有的子目录中

  17. 17

    从所有子目录移动特定文件,并根据子目录重命名

  18. 18

    Linux循环将文件移动到其子目录

  19. 19

    无法将文件移动到其自身的子目录

  20. 20

    无法将文件移动到其自身的子目录

  21. 21

    如何将某些文件移动到子目录?

  22. 22

    将文件从子目录递归移动到父目录中的文件夹

  23. 23

    将子目录中的文件移动到另一个目录

  24. 24

    如何将文件从子目录移动到Merurial的父目录中

  25. 25

    如何将子目录中的所有文件递归移动到单个目录?

  26. 26

    如何将子目录中的所有文件递归移动到单个目录?

  27. 27

    将子目录中的文件移动到另一个目录

  28. 28

    将包含文件的目录排序并移动到子目录中

  29. 29

    查找文件,创建子目录并移动

热门标签

归档