hardlink/softlink несколько регистрируют одному файлу

Необходимо установить пакет заголовков Linux для компиляции дополнительных модулей. Этот пакет содержит .config файл и другие файлы, которые сгенерированы во время компиляции ядра. Выберите версию пакета, который соответствует Вашему рабочему ядру.

4
01.08.2013, 01:55
3 ответа

Со ссылками я боюсь, это не будет возможно. Однако Вы могли использовать именованный канал. Пример:

# create some dummy files
echo alpha >a
echo beta  >b
echo gamma >c

# create named pipe
mkfifo allfiles

# concatenate files into pipe
cat a b c >allfiles

Последняя возможность заблокируется до некоторых чтений процесса от канала и затем выйдет. Для непрерывной операции можно использовать цикл, который ожидает процесса для чтения и запускается снова.

while true; do
  cat a b c >allfiles
done
5
27.01.2020, 20:49
  • 1
    Не Был бы cat блок до процесса начинает читать из именованного канала? –  Joseph R. 31.07.2013, 23:10
  • 2
    @JosephR. Да, это было бы. Добавить & если это не желаемо. –  Marco 31.07.2013, 23:14
  • 3
    Большой. Но не был бы, OP должен повторить эти шаги каждый раз, когда он хочет получить доступ к полному содержанию через allfiles? –  Joseph R. 31.07.2013, 23:15
  • 4
    Действительно. Использовать while true; do cat a b c >allfiles; done если это не желаемо. –  Marco 31.07.2013, 23:18
  • 5
    Спасибо за терпение меня (я все еще борюсь с понятием FIFO). Я думаю, что Ваши примечания должны быть добавлены к ответу, поскольку OP не мог бы знать об этом. –  Joseph R. 31.07.2013, 23:19

Это не возможно.

N файлы означают N inodes. Жесткие ссылки, по определению, являются просто различными названиями того же inode. Символьные ссылки являются файлами, которые указывают на определенный inode (их цель). Так или иначе, мягкий или твердый, ссылка может относиться к единственному inode.

2
27.01.2020, 20:49

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

Теперь, если Вы волнуетесь по поводу пространства и хотите освободить пространство, можно сделать следующее:

for i in *
do
    cat < "$i" >> destination_file &&
      rm -f -- "$i"
done

В основном это добавит вывод к destination_file и удалит файл впоследствии. Также я предполагаю, что Вам не нужны исходные файлы.

2
27.01.2020, 20:49
  • 1
    Почему Вы анализируете ls? Просто используйте for i in *. И почему цикл во-первых? Просто сделайте cat * >> destination. –  Marco 31.07.2013, 23:10
  • 2
    Почему бы не заключить переменную в кавычки ("$i") допускать пробелы в имени файла? –  Joseph R. 31.07.2013, 23:13
  • 3
    @JosephR. Это не помогает. Если у Вас будут специальные символы, то это повредится. –  Marco 31.07.2013, 23:16
  • 4
    @Marco в OP он волнуется по поводу пространства. иначе кошка *>> место назначения было более чем достаточно... следовательно циклом кошке, и удалите файл. –  BitsOfNix 31.07.2013, 23:36
  • 5
    @AlexandreAlves Моя точка: i) Этот цикл ужасен. ii) Это это совершенно не нужный. Просто используйте cat * >dest сопровождаемый rm !(dest) (удар) или rm ^dest (zsh). –  Marco 31.07.2013, 23:41

Теги

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