У меня есть каталог с файлами со строковыми именами, которые начинаются с 5 чисел (т.е. 12345_a_b, 23456_s_a), и у меня есть текстовый файл в том же каталоге, который имеет список имен файлов, указанных таким же образом, однако только числа совпадают, и ничто после подчеркивания (т.е. 12345_q_p, 23456_p_l). Я хочу скопировать файлы в текущем каталоге в новый, но только те, где первые 5 чисел в имени файла соответствуют первым 5 номерам каждого имени файла в текстовом файле, игнорируя все, что происходит после. Кажется, я могу использовать xargs, но я не уверен, как совместить имена частично. Может ли кто-нибудь помочь?
Следующие команды должны сделать трюк, вы можете обменять первые несколько присваиваний переменных со своими буквальными значениями внутри цикла while, если вы предпочитаете.
#!/bin/bash
source_dir=/directory/containing/files
target_dir=/new/directory
list=/full/path/to/number_list
reg='^[0-9]{5}$'
while IFS= read -r line; do
line=${line:0:5}
[[ "$line" =~ $reg ]] && cp -t "$target_dir" "$source_dir"/"$line"* 2>/dev/null
done < "$list"
Команда read будет читать ваши файл по строкам, устанавливая содержимое каждой строки в переменную 'line'. Команда cp использует -t для установки цели для копирования файлов, а шаблон glob "$source_dir"/"$line"* найдет любые файлы в исходном каталоге, которые начинаются с числового значения в переменной строки. Цикл while означает, что команды read и cp выполняются для каждой строки файла списка. IFS= означает, что если в вашем файле списка есть пробелы, они будут включены в строку поиска, это не обязательно необходимо в этом примере, но полезно, когда вы хотите читать файл по строкам. Запустите цикл в ваших файлах. Внутри цикла выясните, совпадают ли имена файлов с именами файлов в вашем текстовом файле, используя grep.
Используя -q, вы можете использовать && cp, если он что-то найдет.
#!/bin/bash
while IFS= read -r file; do
grep -Eq "^${f:0:5}" your_text_file && cp ${file} /path/to/destination/
done <( (find . -type f -regex "^[0-9]{5}.*")
[d2 ] Это будет иметь некоторые накладные расходы, когда у вас огромное количество файлов. Но может использоваться и для более сложных задач ...