Я нахожусь под Linux и использую bash в качестве оболочки для входа. Мне нужно сделать softlink на кучу файлов. Эти файлы перечислены в текстовом файле, скажем, file_list.txt. Каждая строка в file_list.txt - это просто полный путь к одному целевому файлу, который необходимо связать. Хотя я не знаю точно, как это сделать, я верю, что есть способ объединить "cat", «|» и «ln -s» вместе, чтобы сделать работу одной командой оболочки. Так что нужна твоя помощь.
3 ответа
Рассмотрим что-то вроде (не проверено):
for targ in $(cat file_list);
do
tfile=$(basename $targ)
ln -s $targ $tfile
done
Обратите внимание, что Вы можете иметь базовую полосу имени для любого отдельно взятого расширения имени файла, если хотите (используйте флаг basename
любое расширение файла, например, имя (например, «.exe» или что-то еще). Это можно исправить, но это боль.-s
).
Вы можете сжать это в одну строку, например:
$ for targ in $(cat file_list); do tfile=$(basename $targ); ln -s $targ $tfile; done
Вы не говорите, на что хотите сослаться.
Используйте while
цикла без cat
Если в именах файлов есть пробелы, этот метод справится с этим.
while read -r line; do ln -s "$line" target; done < file_list.txt
Вам нужно будет указать способ получения имени цели, поскольку вы не указали его в своем вопросе.
Если вы хотите, чтобы имена в текущем каталоге (или в любом другом каталоге) и если имена в файле являются абсолютными или относительными именами, корректными относительно целевого каталога, то:
ln -s $(<file_list.txt) .
Если вы предпочитаете использовать «кошка», то:
ln -s $(cat file_list.txt) .
Ясно, что я использую текущий каталог в качестве цели.