Если вам нужна сеть, но вы не хотите использовать какие-либо порты (я предполагаю, что это означает IP-порты и, например, последовательный порт), то вам нужно использовать протокол, который не использует порты. Вы можете использовать ICMP и Ping Tunnel для пересылки telnet или ssh через него, или 6to4 (которому присвоен свой собственный тип протокола 41 и он не имеет портов), или подобные меры.
Хотя это ответ на вопрос, вполне возможно, что эти протоколы также блокируются, и само собой разумеется, что такие меры не должны применяться, за исключением очень необычных ситуаций (возможно, за исключением 6to4).
find /home ! -type d -exec bash -c '
for pathname do
if [ "$pathname" -nt "/tmp/calculation/${pathname##*/}" ]
then
cp "$pathname" /tmp/calculation
fi
done' bash {} +
Это позволит найти все файлы каталога, отличные от -, в каталоге /home
, а для их пакетов будет вызван короткий скрипт bash
.
Короткий сценарий bash
будет перебирать текущую группу путей и для каждого будет проверять с помощью теста -nt
, является ли текущий файл более новым, чем копия в целевом каталоге (, или копия не существуют там ). Если файл в целевом каталоге более старый или если он не существует, cp
используется для копирования текущего файла в целевой каталог.
Расширение параметра ${pathname##*/}
удалит любой путь к каталогу перед фактическим именем файла, оставив только часть пути к имени файла. Его можно заменить на $(basename "$pathname")
.
Связанные:
В основном не связаны:
Тест -nt
не является стандартным тестом -. Вот почему я решил использовать bash
для внутреннего скрипта, который вызывает find
. Использование sh -c
вместо bash -c
, вероятно, приведет к тому, что сработает , но семантика теста может немного отличаться в разных оболочках, которые могут маскироваться под sh
.
Например, в оболочках bash
, zsh
и ksh
проверка -nt
верна, если первый операнд имеет отметку времени модификации, более новую, чем у второго операнда, или если второй операнд не существует.
В оболочке dash
, однако, оба файла чаще всего существуют, и первый файл должен быть новее второго, чтобы тест был верным (в соответствии с документацией ). В данном случае эта разница не была бы проблемой.
В оболочке yash
в руководстве не указано, что произойдет, если какой-либо файл не существует.
Таким образом, безопаснее использовать конкретную оболочку при использовании нестандартного -средства, даже если в данном конкретном случае вероятно, оно в любом случае будет работать с sh -c
.
(Недостатком использования bash
в данном случае является то, что разрешение сравниваемых временных меток составляет всего одну секунду, но это уже другая история)
Я попробовал команду ниже, и она сработала нормально
for file in `find /home -type f | awk -F "/" '{print $NF}'`
do
for dir in `find. -type d| sed "s/\.//g"| sed 's/$/\//g'`
do
sudo find $dir -type f -iname $file | awk '{print "ls -ltrh" " " $0}'
done | sh | sed -n '$p'
done | awk '{print "cp -rvfp" " " $NF " " "/destinationlocationtocopy/"}' | sh