I иметь файлы Matlab (.mat) в определенной папке. В текстовом документе у меня есть список идентификаторов, помеченных как 0 и 1. Сначала мне нужно сопоставить идентификаторы и разделить файлы матов, помеченные как '1'. Для справки я подробно описал это ниже с помощью набор образцов.
Например: Предположим, что у меня есть эти файлы в папке
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
, но получаю такие ошибки, как «Нет такого файла или каталогов» Пожалуйста, предложите код / метод для разделения этих файлов.
Попробуйте этот сценарий:
#!/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, и в этом случае перемещает файл в новую папку
.