Я не знаю ни одной команды, которая точно соответствовала бы вашим требованиям. Что-то вроде этого должно работать (удалите --dry-run
когда вы уверены, что довольны результатом; замените --verbose
на --quiet
, если вы хотите, чтобы он работал тише):
src=/path/to/source
dst=/path/to/target
comm -z -23 \
<(find "$src" -type f -printf '%P\0' | sort -z) \
<(find "$dst" -type f -mmin -60 -printf '%P\0' | sort -z) |
rsync --dry-run --verbose --archive --from0 --files-from - "$src" "$dst"
Предполагается, что относительно новые утилиты понимают, как обрабатывать строки, завершающиеся NUL -. При необходимости и при условии, что вы можете гарантировать, что имена файлов не содержат символов новой строки, вы можете удалить три флага -z
и rsync
--from0
и заменить \0
в командах find
на \n
.
Я понял! Возможно, это не лучшее решение,но это работает:
echo 阿姨啊挨打矮小爱国护安检慰置岸边上按摩时案子暗示巴士拔 | sed -e "s/.\{1\}/&\n/g" | awk -v pat="啊爱好情人心安静排全装按照八把握爸吧白菜酒色夭百班长板" 'pat ~ $0' | tr -d '\n'
Пояснение:
echo 阿姨啊挨打矮小爱国护安检慰置岸边上按摩时案子暗示巴士拔
— это способ передачи второй строки в качестве входных данных sed -e "s/.\{1\}/&\n/g"
добавляет новую строку после каждого символа awk -v pat="啊爱好情人心安静排全装按照八把握爸吧白菜酒色夭百班长板" 'pat !~ $0'
печатает только те символы, которые не встречаются вpat
(первой строке)tr -d '\n'
избавляется от всех новых строк Выдает результат
阿姨挨打矮小国护检慰置岸边上摩时案子暗示巴士拔
и удаляет символы 啊, 爱, 安 и 按.
В оболочках, поддерживающих синтаксис${parameter/pattern/string}
(ksh,bash,zsh )вы можете сделать:
$ easy='啊爱好情人心安静排全装按照八把握爸吧白菜酒色夭百班长板'
$ intermediate='阿姨啊挨打矮小爱国护安检慰置岸边上按摩时案子暗示巴士拔'
$ echo "${intermediate//[$easy]/}"
阿姨挨打矮小国护检慰置岸边上摩时案子暗示巴士拔
Это основано на регулярном выражении -подобно выбору символов […]
.
Все отдельные символы в intermediate
, которые также существуют в easy
, будут стерты.
Эквивалентом, который не зависит от оболочки, может быть:
$ echo "$intermediate" | sed 's/['"$easy"']//g'
阿姨挨打矮小国护检慰置岸边上摩时案子暗示巴士拔
с использованием Раку (урожденная Perl6)
Raku был разработан с нуля -для изящной обработки Unicode. Первый пример каждой пары ниже, как правило, из документации Raku; второй пример каждой пары, адаптированной для решения с вашими конкретными китайскими строками:
$ echo "a123b123c" | raku -pe 'tr:d/123//;'
abc
$ echo "阿姨啊挨打矮小爱国护安检慰置岸边上按摩时案子暗示巴士拔" | raku -pe 'tr:d/啊爱好情人心安静排全装按照八把握爸吧白菜酒色夭百班长板//;'
阿姨挨打矮小国护检慰置岸边上摩时案子暗示巴士拔
ИЛИ
$ echo "a123b123c" | raku -pe '.=trans("123" => "");'
abc
$ echo "阿姨啊挨打矮小爱国护安检慰置岸边上按摩时案子暗示巴士拔" | raku -pe '.=trans("啊爱好情人心安静排全装按照八把握爸吧白菜酒色夭百班长板" => "");'
阿姨挨打矮小国护检慰置岸边上摩时案子暗示巴士拔
Флаги строк команды -pe
-предписывают Raku принимать ввод построчно и автоматически печатать возвращаемое значение (s ). Между оператором tr///
и подпрограммой trans()
есть небольшие различия. Документы ниже, HTH.
https://docs.raku.org/language/operators#tr///_in-place_transliteration
https://docs.raku.org/routine/trans
https://raku.org/