У меня большой каталог myfiles, полный разных документов, и я не хочу изменять его структуру.
Поэтому я создал (несколько) других каталогов для каждого класса документов. Например, у меня есть каталог «images», в котором есть символические ссылки на каждый файл .jpg
или .cr2
файл в каталоге «myfiles» плюс другие описательные файлы для каждой символической ссылки (с тем же именем файла) с описанием и другими метаданными. Символические ссылки в каталоге / images могут иметь имя, отличное от исходного связанного файла.
Я пытаюсь найти самый простой способ убедиться, что каждый файл изображения в каталоге «myfiles» имеет символическую ссылку на каталог «images».
Смотрите пример структуры папок
/myfiles/a.doc
/myfiles/b.jpg
/myfiles/c.cr2
/myfiles/d.mov
должен привести
/images/b_800x600.jpg
/images/b_800x600.desc
/images/c_3820x5640.cr2
/images/c_3820x5640.cr2
command-line
files
find
symlink
Роберт Александр
источник
источник
find /myfiles -type f
в файл, а затем использовать,find /images -type l -exec readlink {} \; | egrep myfiles
чтобы получить список файлов, в которых есть символические ссылки, а/images
затем перебрать результаты, выполнив ased
для каждого из них, чтобы удалить пути в первом сохраненном файле, поскольку они уже иметь символьную ссылку, а оставшиеся файлы - это файлы, которые не имеют символической ссылки.ls -l
вы можете увидеть количество жестких ссылок во втором столбце.rm
эти каталоги ссылок и используют,pax -rwl -s "\|.*regex|modifes_filename|" /path/to/myfiles/*.jpg /path/to/jpg_dir
например, для получения жестких ссылок с программно измененными именами файлов только для тех файлов, которые соответствуют вашим jpgs. Вы можете получить намного больше от этого - например, пакетирование, основанное на времени изменения и т. Д.Ответы:
Если я правильно понял вопрос, вам нужны файлы в myfiles, которые не имеют символических ссылок в изображениях:
При таком подходе есть предостережение, если у вас есть файл a.jpg в каталоге myfiles / 1, и у вас есть символическая ссылка на этот файл в каталоге images / 3 или просто в images / файл не будет сообщаться с отсутствующей символической ссылкой.
источник
Я предполагаю, что файлы
myfiles
не являются символическими ссылками, и что ни одно из имен файлов не содержит символов новой строки. (Мой подход все еще может работать, если эти предположения нарушаются, но он становится более сложным.) Я также предполагаю, что у вас есть общаяreadlink
утилита и она поддерживает-f
канонизацию путей, как в случае Linux (как GNU, так и BusyBox), но не на, например, OSX.Создайте список файлов и рассортируйте его по порядку:
Составьте список целей символических ссылок с абсолютными путями.
Список файлов, которые не связаны:
Если вы используете оболочку, которая поддерживает подстановку процессов, вы можете поместить все это в одну команду:
Если ссылки ниже
/images
абсолютные, вы можете использовать ихreadlink
без-f
опции, доступной в * BSD и OSX.источник
comm
команды, но я не буду сейчас, когда я вижу, что вы уже сделали. Однако перенаправление сsort
не имеет смысла; тогда подстановки процесса ничего не выведут. Кроме того, вы можете добавить множество каталогов рядом с ними,/images
если вы хотите найти файлы, в/myfiles
которых нет символической ссылки ни из одного из ряда каталогов, кроме/images
.readlink -f