Linux求助:如何根据.txt文件将文件移动到文件夹?

Linux help: how do you move files to folders based on a .txt file?

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

任何有关如何在 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/""*.jpg " )}' inputfile

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

  1. 我们使用mv(移动)命令并使用输入文件中的第一个字段</code>来寻址数据目录中的JPG文件。</li> <li>然后我们使用输入文件的第二个字段 <code> 作为目标目录。

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 }'`
        DIR_age=`cat "$DIR_CWD/file.txt" | grep $ID_number | awk '{print }'`
        mv -- "$DIR_CWD/data/$x" "$DIR_CWD/$DIR_age"
    done

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