Вы также можете определить нужные каталоги следующим образом:
find. -maxdepth 2 -path '*/*/wanted.txt' -type f \
-execdir test ! -f unwanted.txt \; -execdir pwd \;
Это работает следующим образом:
-path
дополнительно ограничивает их глубину ровно 2 из-за наличия 2 косых черт, так как максимальная глубина не позволяет идти дальше, а 2 явных косых черты не позволяют углубиться ниже 2. -type f
-execdir
повысит уровень операции до каталога, в котором находится требуемый.txt, и, следовательно, команда test
будет искать там нежелательный файл. -execdir
), где нежелательный файл не был найден. -execdir
выполняются один раз / каталог и только в тех каталогах, которые наверняка содержат обычные файлы Want.txt. Я пробовал использовать приведенную ниже команду sed, и она работала отлично
команда
sed -i '/^Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc,aes192-cbc,aes256-c/s/.*/#&\nCiphers abc-123,def-456,ghi-789/g' filename
выход
#Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc,aes192-cbc,aes256-cbc
Ciphers abc-123,def-456,ghi-789
sed -i -n 'p; s/^Ciphers/#&/p' /etc/ssh/sshd_config
-i
на месте
-n
ничего не печатает, если явно не напечатано
/p
в конце строки поиска принудительно печатает, эффективно переопределяя -n
в совпадающей строке