如何在单独的文件夹中添加字符串和移动数字

时间:2017-12-02 18:53:12

标签: bash macos unix

我在一个文件夹上有很多数字,它们都是.png 我也有像这样的txt文件

label                    first      end     group
Afghanestan              200        201     1
Afghanestankabol         12         14      1
Afghanestankabolindia    17         10      1
indiaAfghanestan         10         2       2
Holandnorway             500        400     3
holand                   100        200     3
holandindia              400        300     3
USA                      10         20      4
USAargentina             12         1       4
USAargentinabrazil       16         15      4

label是图片的名称,这就是我要做的事情

  • 我想创建与组一样多的文件夹(在本例中为4)

  • 然后在名称前添加开始,并在图片名称的末尾添加结束,并将其移至指定给他们的文件夹

例如图片 Afghanestan

图像名称变为200A_fghanestan_201.png,它将被移动到文件夹1

一开始我以为我应该逐行读取文件

#!/bin/sh
value=`myfile.txt`
echo "$label"

输出将如下所示

4个文件夹。例如

user:outp admin$ ls
1   2   3   4
user:outp admin$ cd 1
user:1 admin$ ls
12_Afghanestankabol_14.png  200_Afghanestan_201.png
17_Afghanestankabolindia_10.png

2 个答案:

答案 0 :(得分:1)

将以下文件保存在您的HOME目录中go

#!/bin/bash
sed '1d' myfile.txt | while read label first end group ; do
   echo mkdir -p ${group}
   echo mv ${label}.png ${group}/${first}_${label}_${end}.png
done

然后启动终端并使用以下命令使脚本可执行:

chmod +x $HOME/go

然后将目录更改为图像所在的位置,并使用以下命令运行脚本:

cd path/to/your/images
$HOME/go

如果您喜欢它的功能,请从中间的两行中删除单词echo,它实际上会执行此操作。

<强>解释

脚本的第一行使用sed删除文件的第一行,因为这只是标题。然后它一次读取一行到四个变量,生成输出目录(使用-p,这样如果目录已经存在则没有错误)并将文件移动到适当的位置。

请制作文件的备份副本并首先运行它们!

答案 1 :(得分:0)

一般来说,您应该展示您尝试过的内容,然后社区将协助解决问题。我会给你一个开始:

  while read label first end group
    do
      mv ${label}.png /path/to/${group}/${first}_${label}_${last}.png