Estou tentando fazer "script de uma linha" ou script bash muito pequeno.
Ele tem que encontrar o arquivo (por exemplo ./xxx/one.php
) e se esse arquivo existir editar (com printf
ou echo
) outro arquivo NO MESMO diretório (por exemplo ./xxx/test.php
).
Agora eu fiz a segunda parte - editando o arquivo existente, mas não tenho ideia de como ou onde inserir "se".
Na verdade eu tenho algo assim
for file in `find . -name "test*.php"` ; do
(printf "It's me, on first line \n and me on second line\n" && cat $file) > "$file".bak && mv "$file".bak "$file"
done
Deve ser algo assim?
if [[ `find . -name "one*.php` ]]; do
for file in `find . -name "test*.php"` ; do
(printf "It's me, on first line \n and me on second line\n" && cat $file) > "$file".bak && mv "$file".bak "$file"
done
done
A
-execdir
opção parafind
é útil aqui:-execdir
é-execdir
executará o comando fornecido no diretório em que o arquivo encontrado estava, então otest.php
arquivo "ao lado" estará ali para manipular. Aqui iniciamosbash
nesse diretório e executamos um pequeno script lá para fazer as manipulações desejadas. Não há necessidade de manipulações de caminho complexas ou reencontrar o arquivo. Acima eu verifico se o arquivo existe, mas se ele sempre estará lá (ou você quer criá-lo incondicionalmente) você pode tirá-if
lo.-execdir
é uma extensão find do GNU, não em POSIX, mas você provavelmente tem isso dado suas tags. Uma ressalva é que suaPATH
variável de ambiente não pode conter.
nenhum outro caminho relativo (incluindo um elemento vazio), por motivos de segurança, portanto, se o seu ambiente tiver, você precisará redefini-lo primeiro:PATH=... find ...
.