Как я проверяю, является ли файл символьной ссылкой на каталог?

# take a read-only snapshot:
btrfs sub snap -r fs snapshot

... do things on fs

# rolling back:
btrfs sub del fs # at which point you'll lose those things you've done
                 # if you want to preserve them, just rename fs instead

btrfs sub snap snapshot fs # reinstate snapshot as a read+write fs
btrfs sub del snapshot # delete the non-longer needed read-only snapshot
69
21.10.2013, 18:49
3 ответа

Просто объедините два теста с &&:

if [[ -L "$file" && -d "$file" ]]
then
    echo "$file is a symlink to a directory"
fi
81
27.01.2020, 19:31
  • 1
    Если Вы хотите проверить скрытые файлы, и каталоги также предшествуют этому прежде: shopt -s dotglob –  rubo77 29.05.2014, 19:04
  • 2
    Не [-L "$file"] && [-d "$file"] лучше? Что-то с мобильностью между оболочками iirc. –  Lennart Rolland 30.05.2015, 01:29
  • 3
    @Lennart OP's [[, и я взял это в качестве логической начальной точки. Обсуждение достоинств [ по сравнению с [[ вне объема для этого ответа (но доступен здесь). –   30.05.2015, 04:56

Решение с find и использование функции:

dosomething () {
    echo "doing something with $1"; 
}
find -L -path './*' -prune -type d| while read file; do 
    if [[ -L "$file" && -d "$file" ]];
        then dosomething "$file";
    fi; 
done
1
27.01.2020, 19:31
  • 1
    Используя find и a while read поскольку это - вид излишества... –  Camilo Martin 20.08.2014, 17:20
  • 2
    действительно полезна, если Вы ищете только определенные файлы –  rubo77 21.08.2014, 15:40

Вот одна команда, которая рекурсивно перечислит симлинки, целью которых является каталог (начиная с текущего каталога):

find . -type l -xtype d

Ссылка: http://www.commandlinefu. com/commands/view/6105/find-all-symlinks-that-link-to-directories

8
27.01.2020, 19:31

Теги

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