Определение, из какого каталога происходит имя файла

У меня есть список имен файлов в формате .txt из двух разных каталогов. Они поступают из базы данных сервера и имеют единую характеристику (флаг базы данных), но мне действительно нужно знать, из какого из 2 каталогов они происходят.

Есть ли способ пакетной обработки списка для создания нового списка, который показывает, из какого каталога пришел файл?

Я могу сделать это один за другим, используя «поиск», но в списке около 150 файлы.

Быстрее ли читать о запросах к базе данных и переделывать список самостоятельно?

1
задан 11 April 2016 в 23:13

2 ответа

Вы могли всегда использовать locate команда, которая читает базу данных всех файлов. База данных должна быть обновлена перед выполнением locate,как бы то ни было.

Вот пример того, что можно было бы сделать

$ locate --regex ".*/lightdm.conf$"                                            
/etc/init/lightdm.conf
/etc/lightdm/lightdm.conf

Теперь, к пакетной обработке список файлов, можно было использовать while read do. . . done < input_file структура, с locate код внутри. Что-то вроде этого:

$> cat > file_list.txt                                                         
passwd
lightdm.conf
firefox.desktop

$> while read line ; do                                                        
> locate --regex ".*/$line$"                                                   
> done < file_list.txt                                                         
/etc/passwd
/etc/cron.daily/passwd
/etc/pam.d/passwd
/home/xieerqi/Desktop/cleanup/passwd
/home/xieerqi/Documents/passwd
/usr/bin/passwd
/usr/share/bash-completion/completions/passwd
/usr/share/doc/passwd
/usr/share/lintian/overrides/passwd
/etc/init/lightdm.conf
/etc/lightdm/lightdm.conf
/usr/share/applications/firefox.desktop

Конечно, это не является самым быстрым из поисков - после того, как вся база данных будет содержать тысячи файлов, но намного более быстрый, чем пересечение всей структуры каталогов с find

0
ответ дан 12 April 2016 в 09:13
  • 1
    Спасибо за совместное использование Вашего решения:-), Возможно, можно использовать следующую ссылку для анализа подобных проблем в будущем (проблемы с аппаратными средствами карты флэш-памяти с интерфейсом USB или карты памяти), askubuntu.com/questions/144852/… – sudodus 7 September 2017 в 05:42

Если Вы знаете, что файлы могут только быть в одном из двух мест, то, вероятно, более эффективно протестировать каждого явно, например,

while IFS= read -r f; do 
  if [ -e "dir1/$f" ]; then
    echo "dir1/$f"
  elif [ -e "dir2/$f" ]; then
    echo "dir2/$f"
  else
    echo "$f: not found"
  fi
done < filelist
0
ответ дан 12 April 2016 в 09:13
  • 1
    @BЕ‚ aЕјejMichalik Вы всегда может нейтрализация к опции по умолчанию с reset (в этом случае gsettings reset org.gnome.desktop.wm.preferences button-layout). – pomsky 6 November 2018 в 04:14

Другие вопросы по тегам:

Похожие вопросы: