![如何将匹配 ID 的 mat 文件移动到不同的文件夹中](https://linux22.com/image/1182949/%E5%A6%82%E4%BD%95%E5%B0%86%E5%8C%B9%E9%85%8D%20ID%20%E7%9A%84%20mat%20%E6%96%87%E4%BB%B6%E7%A7%BB%E5%8A%A8%E5%88%B0%E4%B8%8D%E5%90%8C%E7%9A%84%E6%96%87%E4%BB%B6%E5%A4%B9%E4%B8%AD.png)
我在一个特定文件夹中有 Matlab (.mat) 文件。在文本文档中,我有一些标记为 0 和 1 的 ID 列表。首先,我需要匹配 ID 并分离标记为“1”的 mat 文件。为了供您参考,我在下面用一个示例集详细说明了这一点。
例如:假设我在一个文件夹中有这些文件
2424903_ (1)_crop_vampire_3.1.2.mat
1905302 (2)_crop_vampire_3.1.2.mat
1904802 (1)_crop_vampire_3.1.2.mat
1902101_IYYANAR (1)_crop_vampire_3.1.2.mat
文本文件:
2424903 - 1
1905302 - 0
1904802 - 0
1902101 - 1
预期结果:
2424903_ (1)_crop_vampire_3.1.2.mat
1902101_IYYANAR (1)_crop_vampire_3.1.2.mat
我只需要将这 2 个文件放在单独的文件夹中。
我已经尝试过以下代码
$cat file.txt | xargs mv -t ./new folder
$xargs -a file.txt mv -t ./new folder
但我收到诸如“没有这样的文件或目录”之类的错误,请建议一个代码/方法来分离这些文件。
答案1
尝试这个脚本:
#!/bin/bash
while read -r line
do
id_num=$(echo "$line" | cut -d ' ' -f 1)
id_inc=$(echo "$line" | cut -d ' ' -f 3)
if [[ "$id_inc" == 1 ]]; then
file=$(find -name "${id_num}*")
mv "$file" -t './new folder'
# echo "$file" # if you want to print the filename
fi
done < file.txt
Xargs 和包含空格的文件名存在问题。此解决方案改为遍历每一行,检查最后一个字段是否为 1,在这种情况下将文件移动到new folder
。