Я сделал хорошее наблюдение из этого:
mkdir test; cd test; mkdir t1 t2 t3
cd ~/
mkdir testmove;
cd testmove;
touch abcd
mv * ~/test/*
Вот интересная часть, файл "abcd" перемещен в каталог t3 наряду с каталогами t1 и t2, который является:
ls test
-> t3
cd t3
ls
t1 t2 abcd
то, что я понял, - когда мы пишем *, команда на самом деле расширяется и затем выполняется так, команда mv расширена как
mv abcd ~/test/t1 ~/test/t2 ~/test/t3
Таким образом это взяло t3 в качестве места назначения и переместило abcd, t1, t2 к t3
Таким образом для ответа на вопрос это будет в последнем каталоге в /
Из страницы справочника mv
если у Вас есть символьная ссылка
Avoid specifying a source name with a trailing slash,
when it might be a symlink to a directory. Otherwise, `mv' may do
something very surprising, since its behavior depends on the underlying
rename system call. On a system with a modern Linux-based kernel, it
fails with `errno=ENOTDIR'. However, on other systems (at least
FreeBSD 6.1 and Solaris 10) it silently renames not the symlink but
rather the directory referenced by the symlink. *Note Trailing
slashes::.
Можно искать использование файла find / -type f -name <filename>
В то время как канонический способ решения этой проблемы включает пасту
, Здесь я предлагаю awk
альтернативу, где выходной разделитель записей устанавливается в пробел на нечетной и новой строках на четных строках
awk '{ORS=NR%2?" ":"\n";print}' file
-121--119412- При поиске команд, вместо сопоставления имен двоичных файлов команд в качестве альтернативы можно сопоставить имена человеко-страниц; Это может иметь смысл, поскольку man
уже предоставляет эту функцию по умолчанию:
$ man --sections=1,8 --where --all --regex '^mkdi'
/usr/share/man/man1/mkdir.1.gz
/usr/share/man/man1/mkdirhier.1.gz
/usr/share/man/man1/mkdiskimage.1.gz
Использование sed
для извлечения только имен команд:
$ man --sections=1,8 --where --all --regex '^mkdi' | \
sed -r 's/.*\/([^/]+)\.[^.]+\.[^.]+$/\1/'
mkdir
mkdirhier
mkdiskimage
И выполнение , которые
для имен команд тоже:
$ man --sections=1,8 --where --all --regex '^mkdi' | \
sed -r 's/.*\/([^/]+)\.[^.]+\.[^.]+$/\1/' | xargs which
/bin/mkdir
/usr/bin/mkdirhier
/usr/bin/mkdiskimage
узоры являются регулярными выражениями, поэтому ^
добавляется для соответствия только в начале имени.
В синтаксисе образца, подобном оболочке glob, замените -regex
на --wildcard
,
как человек... --wildcard 'mkdi *' |...
.
В качестве функции оболочки:
whichmatch() {
man --sections=1,8 --where --all --regex "$@" |
sed -r 's/.*\/([^/]+)\.[^.]+\.[^.]+$/\1/' |
xargs which
}
используется как
whichmatch '^mkdi'
Для приблизительного совпадения имен команд , который
может использоваться вместо man
.
Я думаю, что ваша лучшая ставка, вероятно, обернуть сценарий (например, сценарий оболочки) вокруг pacman, который заботится о настройке вещей.
В вашем вопросе отсутствуют некоторые детали, но я предполагаю, что ваш репозиторий недоступен из Интернета и только вашей локальной сети, но программное обеспечение лицензировано для каждого пользователя (а не для всего сайта), поэтому вам нужно ограничить, какие пакеты могут быть установлены разными пользователями.