Ограничить ps
чтобы только найти команду и произвести информацию, Вы заботитесь о.
ps -C processname -o pid
Можно хотеть проверить код результата команды прежде, чем попытаться на самом деле уничтожить что-либо все же.
Я создал сценарий, который сделает это. Сценарий преобразует все жесткие ссылки на его исходное каталог (первый аргумент), которые такие же, как в рабочем каталоге (дополнительный второй аргумент) в символические ссылки:
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 ссылки. Удлинительные файлы имеют значение ссылки по крайней мере два.
По крайней мере 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
для создания относительных ссылок, в противном случае ссылки может сломаться.