2

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

ln -s /dir/file1 /dir/file2 ... /other/dir

но формат имен файлов не следует простому правилу, поэтому мы не можем использовать что-то вроде

ln -s /dir/file* /target/dir.

Есть в любом случае, чтобы не повторить /dir , что-то вроде:

/dir/{file1 file2 ...} = /dir/file1 /dir/file2 ...

так что мы можем сделать что-то вроде:

ln -s /dir/{file1 file2 ...} /target/dir

2 ответа2

8

Да, синтаксис очень похож на то, что вы хотели сделать. Высказывание:

ln -s /dir/{file1,file2,foo,bar} /target/dir

связывает файлы file1 , file2 , foo , bar из /dir/ в /target/dir/ .

Вышеуказанный синтаксис называется расширением скобок.

(Расширение скобок приводит к тому, что /dir/{file1,file2,foo,bar} расширяется до /dir/file1 /dir/file2 /dir/foo /dir/bar .)

2

Для сложных правил попробуйте так:

cd dir
find . -name 'file1*' -or -name 'file2*' -or ... -exec ln -s '{}' '/other/dir/{}' ';'

Обратите внимание, что все '*', '{}' и ';' должен быть указан для предотвращения расширения оболочки и необработанного прохождения, чтобы найти!

Для простых перечислений достаточно хорошего расширения оболочки {aa,bb,cc} .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .