Как создать софт-ссылки для каждого файла в каталоге? - PullRequest
6 голосов
/ 01 февраля 2011

У меня есть каталог, /original, в котором есть сотни файлов.У меня есть сценарий, который будет обрабатывать файлы по одному и удалять файл, чтобы он не выполнялся снова, если сценарий прерывается.Итак, мне нужна куча программных ссылок на файлы от /original до /processing.Вот что я попробовал:

find /original -name "*.processme" -exec echo ln -s {} $(basename {}) \;

и получил что-то вроде:

ln -s /original/1.processme /original/1.processme
ln -s /original/2.processme /original/2.processme
ln -s /original/3.processme /original/3.processme
...

Я хотел что-то вроде:

ln -s /original/1.processme 1.processme
ln -s /original/2.processme 2.processme
ln -s /original/3.processme 3.processme
...

Кажется, что $(basename) работаетдо {} конвертируется.Есть ли способ это исправить?Если нет, то как еще я могу достичь своей цели?

Ответы [ 5 ]

12 голосов
/ 01 февраля 2011

Вы также можете использовать cp (особенно параметр -s, который создает символические ссылки), например.

find /original -name "*.processme" -print0 | xargs -0 cp -s --target-directory=.
6 голосов
/ 01 февраля 2011

find /original -name '*.processme' -exec echo ln -s {} . \;

Особая благодарность Райану Оберой за помощь в понимании того, что я могу использовать . вместо $(basename ...).

2 голосов
/ 01 февраля 2011

Как насчет -

ln -s $(echo /original/*.processme) .
1 голос
/ 01 февраля 2011

Попробуйте:

find /original -name "*.processme" -exec sh -c 'echo ln -s "$@" $(basename "$@")' _ {} \;
0 голосов
/ 18 декабря 2016

вам просто нужно удалить эхо и полностью удалить повторение пути к файлу и базового имени

Если ваша папка с исходным кодом - это

ls -l /original
total 3
-rw-r--r-- 1 user user   345 Dec 17 21:17 1.processme
-rw-r--r-- 1 user user   345 Dec 17 21:17 2.processme
-rw-r--r-- 1 user user   345 Dec 17 21:17 3.processme

Тогда

cd /processing
find /original -name "*.processme" -exec ln -s '{}' \;

Должен произвести

ls -l /processing
total 3
lrwxrwxrwx 1 user user 33 Dec 17 21:38 1.processme -> /original/1.processme
lrwxrwxrwx 1 user user 33 Dec 17 21:38 2.processme -> /original/2.processme
lrwxrwxrwx 1 user user 33 Dec 17 21:38 3.processme -> /original/3.processme

С осознанием того, что ОП от 5 лет назад, я опубликую это для тех, кто ищет то же решение, что и я, прежде чем я разработал его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...