微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Linux 帮助:如何将文件移动到基​​于 .txt 文件的文件夹?

如何解决Linux 帮助:如何将文件移动到基​​于 .txt 文件的文件夹?

我有一个 .txt 文件,其中包含一列 ID 及其年龄(作为整数)。我已经在我的目录中为每个年龄段(20-86 岁)创建了单独的文件夹。对于我的 .txt 文件中的每个 ID,我想根据他们在我的 .txt 文件的第二列中列出的年龄类别,将他们的图像(当前存储在“data”文件夹中)移动到相应的文件夹。

任何有关如何在 Linux 中执行此操作的帮助将不胜感激!

更新了以不同后缀结尾的文件示例。

当前工作目录:

data/ 20/ 21/ 22/ 23/ 24/ ...

文本文件

ID001 21
ID002 23
ID003 20
ID004 22
ID005 21

ls data/

ID001-XXX-2125.jpg
ID002-YYY-2370.jpg
ID003-XXX-2125.jpg
ID004-YYY-2370.jpg
ID005-XXX-2125.jpg

所需的输出

20/
ID003-XXX-2125.jpg

21/
ID001-XXX-2125.jpg
ID005-XXX-2370.jpg

22/
ID004-YYY-2370.jpg

23/
ID002-YYY-2370.jpg

解决方法

while read fil id
do
    mv -f "data/"*"$fil"*".jpg" "$id/"
done < file

循环读取文件(在本例中称为文件)中的两个字段,并使用变量构建并执行 mv 命令。

,

正如您所建议的,awk 可以 完成这种任务(尽管请参阅下面 Ed Morton 的评论)。您可以尝试以下方法,该方法已使用 GNU awk 进行了测试。从您的工作目录,您可以执行以下操作:

awk '{system("mv data/"$1"*.jpg " $2)}' inputfile

说明:此处使用了 system() 函数。 system() 函数允许您执行作为表达式提供的命令。在这种情况下:

  1. 我们使用 mv(移动)命令并使用输入文件中的第一个字段 $1 来寻址数据目录中的 JPG 文件。
  2. 然后我们将输入文件的第二个字段 $2 用于目标目录。

system() 函数以标准 C 库函数为模型。进一步阅读 The GNU Awk User’s Guide

,

考虑将您的 .txt 文件放在您当前的工作目录中。你可以试试这个编写和测试过的脚本吗?

#!/bin/sh    
DIR_CWD="/path/to/current_working_directory"
cd "$DIR_CWD/data"
    for x in *; do
        ID_number=`echo $x | awk -F"-" '{print $1}'`
        DIR_age=`cat "$DIR_CWD/file.txt" | grep $ID_number | awk '{print $2}'`
        mv -- "$DIR_CWD/data/$x" "$DIR_CWD/$DIR_age"
    done

请注意,DIR_CWD 必须声明为您当前工作目录的路径。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。