У меня есть папка, в которой есть много папок внутри, каждая из которых содержит файл фильма. Теперь я хочу видеть все эти фильмы за один раз (но мне нужно сохранить структуру папок), поэтому я хотел символизировать их все в папку верхнего уровня (плоский вид в Directory Opus был бы здесь, но я 'm на mac). Вот моя попыткасценарий оболочки для связывания определенных файлов на одном уровне
for file in */*/*.mov;
do
newname='echo $file | sed "s|[^/]*/[^/]*/||g"';
ln -s $file echo $newname;
done
Так что я пытаюсь сделать на линии 3 повернуть путь Foo/бар/spud.mov в spud.mov, а затем на линии 4 сделать пер -s Foo/бар/Спада .mov spud.mov
Но это не работает, все это я получаю
пер: "s | [^ /] /[^ /]/|| г": нет такого файл или справочник
I ' вы пробовали различные комбинации кавычек и побегов, но не повезло. Эффект sed работает, но я, очевидно, что-то сделал с моими переменными.
Благодаря
Обычный способ получить последний компонент пути - это команда basename: 'ln -s $ i $ (basename $ i)' –
его нормально использовать базовое имя для одного из двух файлов, однако для многих файлов, использование возможностей внутренней оболочки оболочки для получения «basename» намного более эффективно. – ghostdog74
вам не нужно ни того, ни другого; просто "." работает, потому что при передаче каталога в качестве последнего аргумента ln -s делает то же самое ... – freiheit