Преобразуйте hardlink в символьную ссылку

Ограничить ps чтобы только найти команду и произвести информацию, Вы заботитесь о.

ps -C processname -o pid

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

4
14.07.2018, 06:43
2 ответа

Я создал сценарий, который сделает это. Сценарий преобразует все жесткие ссылки на его исходное каталог (первый аргумент), которые такие же, как в рабочем каталоге (дополнительный второй аргумент) в символические ссылки:

https://gist.github.com/rubo77/ 7A9A83695A284121695A28412ABBCD

У него есть вариант -n для сухого прогона, что ничего не делает, кроме как показывает, что будет сделано.

Основная часть:

$WORKING_DIR=./
#relative source directory from working directory:
$SOURCE_DIR=../otherdir/with/hard-links/with-the-same-inodes

# find all files in WORKING_DIR
cd "$WORKING_DIR"
find "." -type f -links +1 -printf "%i %p\n" | \
  while read working_inode working_on
do
    find "$SOURCE_DIR" -type f -links +1 -printf "%i %p\n" | sort -nk1 | \
      while read inode file
    do
        if [[ $inode == $working_inode ]]; then
            ln -vsf "$file" "$working_on"
        fi
    done
done

-Links +1 -> найдет все файлы, которые имеют более 1 ссылки. Удлинительные файлы имеют значение ссылки по крайней мере два.

4
27.01.2020, 20:54

По крайней мере GNU find также позволяет выполнять поиск по Inode, либо числовому ( -inode ), либо по ссылке ( -samefile ).

Итак, вы можете использовать:

find "$WORKING_DIR" -type f -links +1 | while read file
do
  find "$SOURCE_DIR" -samefile "$file" -exec ln -vsf '{}' "$file" \;
done

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

Кроме того, вы должны либо указать абсолютный путь для $ SOURCE_DIR , либо использовать параметр -r с ln для создания относительных ссылок, в противном случае ссылки может сломаться.

1
27.01.2020, 20:54

Теги

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