2012-04-16 4 views
2

У меня есть папка (say/data) с набором файлов: a.txt, b.bin, c.bak, d.txt, e.bin. Мне нужно создать ссылки на те файлы с таким же именем (отображение 1-1) в папке (/ dataIL). То есть,/dataIL должен иметь 5 ссылок:скрипт для создания ссылок

a.txt->../data/a.txt 
b.bin->../data/b.bin 
c.bak->../data/c.bak 
d.txt->../data/d.txt 
e.bin->../data/e.bin 

Команда для создания одной ссылки является: пер -s ../data/a.txt a.txt

Хотите знать, что команды сценария я могу запустить для создания всех файлов. Также обратите внимание на файлы с другими расширениями. Мне просто нужны ссылки на все файлы с любым расширением.

У меня есть оболочка bash. Благодарю.

ответ

4

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

ln -s data/* . 

Это предполагает, что вы хотели бы создать ссылки на все файлы в data. Также обратите внимание, что в зависимости от ваших настроек это может пропускать файлы с именами, начинающимися с точки.

+1

Вам даже не нужно давать последний параметр в 'ln' - по умолчанию он использует текущую директорию. –

+0

Спасибо. Это сработало. – Romonov

1
find ../data -maxdepth 1 -type f -exec bash -c "ln -s {} \`basename {}\`" \; 

../data может быть любой каталог

+1

Единственным преимуществом для этого подхода Адама Залчмана является то, что он будет продолжать работать, даже если в каталоге есть нелепо большое количество файлов. Для большинства людей это не является практической проблемой. Я бы предложил улучшение: просто exec 'ln' напрямую, например:' -exec ln -s {}. \; '. Нет необходимости указывать имя целевого файла, так как по умолчанию будет использоваться имя исходного файла. – Sorpigal

Смежные вопросы