如何解决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()
函数允许您执行作为表达式提供的命令。在这种情况下:
- 我们使用
mv
(移动)命令并使用输入文件中的第一个字段$1
来寻址数据目录中的 JPG 文件。 - 然后我们将输入文件的第二个字段
$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 举报,一经查实,本站将立刻删除。