screen -dAr default || screen -AS default
работы для меня. Я добавляю это к своему ~/.bashrc.
Кратко объяснение переключателей:
d
- Отсоедините экран, если он все еще присоединен от другой сессии.A
- Адаптируйте окна на экране к новому терминальному размеру.r default
- Присоедините к экрану, названному значением по умолчанию.Если первая экранная команда (та прежде ||
) не успешно выполняется, второй выполняется:
A
- Как объяснено выше...S default
- Создайте новую экранную сессию со значение по умолчанию имени.Хотя общая проблема идентификации расширений сложна, можно немного почистить скрипт:
найти
, чтобы рассматривать файлы только с расширением: -имя '*.*'
awk
вместо cut
ting себе:find
для выполнения этого скрипта. Таким образом: скрипт, названный, скажем, move.sh
:
#! /bin/bash
for i
do
ext=/some/where/else/$(awk -F. '{print $NF}' <<<"$i")
mkdir -p "$ext"
mv "$i" "$ext"
done
Затем запустите find
таким образом:
find . -name '*.*' -type f -exec move.sh {} +
Проблема в том, что вы не можете переставить все файлы в папке, поэтому вы можете использовать xargs
:
find . -name '*.*' -type f -print0 > /tmp/temp
xargs -0 move.sh < /tmp/tmp
Я не слишком уверен в эффективности, но другой подход будет заключаться в том, чтобы получить все расширения, а затем переместить все файлы, вовлеченные в процесс одним махом.
Что-то вроде:
find . -name '*.*' -type f -print0 | sed -z 's/.*\.//g' | sort -zu > /tmp/file-exts
Это должно дать вам список уникальных расширений файлов. Тогда наш move.sh
будет выглядеть так:
#!/bin/bash
for i
do
mkdir -p "$i"
find . -name "*.$i" -type f -exec mv -t "$i" {} +
done
И мы запустим его:
xargs -0 move.sh < /tmp/file-exts
Я делаю довольно много предположений в этом посте, таких как sed
и sort
, поддерживающих -z
(позволяя им работать с NUL-терминированными строками, которые находят
и xargs
процветают).
Вам нужно добавить PID_FILE и SIG_NUM в dnsmasq.conf, подобное так:
# logfilename [owner:group] mode count size when flags [/pid_file] [sig_num]
/var/log/dnsmasq.log nobody:admin 640 5 10000 * Z /var/run/dnsmasq.pid 31
SIG_NUM 31 - SIGUSR2, который скажет DNSMASQ, чтобы закрыть и открыть свой файл журнала.
-121--146195- Разборки выхода Найти
не является удаленным. Что, если в нем было имя файла с новой строкой? Использование Найти ... -Exec ...
, который гарантирует надежную обработку.
find . -type f -exec sh -c '…' {} \;
Shell Snippet ...
получает имя файла в $ 0
. Обратите внимание, что это отдельный процесс оболочки, он не наследует переменные или функции из сценария дедушка. Вы можете ускорить обработку, используя тот же подпроцесс оболочки для обработки нескольких файлов.
find . -type f -exec sh -c 'for x; do … done' _ {} +
На этот раз внутри цикла имени файла находится в переменной x
.
, вызывающее внешние утилиты, такие как ,
, , , вырезан
и т. Д. Хрупкая: вы должны быть чрезвычайно осторожны Вам не нужно: встроенные функции обработки строки оболочки достаточно для того, что вы хотите сделать здесь. Учитывая имя файла $ x
:
directory=${x%/*}
basename=${x##*/}
extension=…
if [ -n "$extension" ]; then
mkdir -p "$directory/extension"
mv "$x" "$directory/extension"
fi
Что такое расширение файла? Это часть после одного из .
в именах. Там нет стандарта, который говорит, какой. Вам решать, что вы считаете расширением в таких случаях, как Foo.tar.gz
или BAR-1.2
.
Вот какой-то пример кода, который рассматривает общие расширения сжатия в гнездо, и это требует расширений для содержания буквы, так что Foo-1.2.tar.gz
считается расширением TAR. Гз
.
extension=
while case "${basename##*.}" in
gz|bz2|xz) extension=.${basename##*.}$extension;; # stackable extension
*) false;;
do
basename=${basename%.*}
done
case "${basename##*.}" in
"$basename") :;; # no . ==> no extension
*[!0-9A-Za-z]*) :;; # only allow alphanumeric characters
*[A-Za-z]*) extension=${basename##*.}$extension;; # non-stackable extension
*) false;; # require at least one letter
esac
extension=${extension#.}