¿Cómo cambio programáticamente la configuración de "Ocultar extensión" para obtener una lista de archivos?

1

Por alguna razón, cuando hago una operación de bash en una lista de archivos (es decir, ls | cat -n | while read n f; do mv "$f" 'printf "name-%02d.png" $n'; done , la configuración de "Ocultar extensión" se habilita en todos ellos, y tengo que desmarcarlo manualmente a través de "Obtener información". ¿Cómo puedo evitar esto, o arreglarlo programáticamente?

EDITAR: Los archivos en los que estaba operando eran capturas de pantalla nativas y, por lo tanto, ya tenían sus extensiones ocultas. Mi mal!

    
pregunta T3db0t 31.10.2017 - 20:52

1 respuesta

3

Hmmm, eso suena realmente extraño. Acabo de ejecutar su código de muestra en algunos archivos de prueba y no modificó la marca Ocultar extensión en absoluto. ¿Está seguro de que los archivos no tenían esa opción activada antes de ejecutar su comando? ¿Ha intentado crear algunos archivos nuevos, verificando manualmente que ninguno tiene esa opción seleccionada y luego ejecutando su comando en ellos?

No puedo ayudarlo en cuanto a la parte de su pregunta sobre "cómo evitar esto", ya que no puedo recrear su problema por mi parte. Pero puedes deshabilitar esa configuración programáticamente. Si tiene instalado Xcode, puede hacer lo siguiente:

# Disables "Hide extension" for all visible files in current directory
for file in *; do
    SetFile -a e "$file"
done

Tenga en cuenta que si alguna vez desea revertir el proceso (es decir, activar la configuración), puede hacerlo cambiando la minúscula e a una mayúscula E .

# Enables "Hide extension" for all visible files in current directory
for file in *; do
    SetFile -a E "$file"
done

Si no tiene Xcode instalado, consulte esto responde en el superusuario para obtener instrucciones sobre cómo hacer lo mismo con AppleScript.

Por cierto, debes tratar de evitar analizar la salida de ls como lo hiciste en tu ejemplo. Puede causar problemas si alguno de los archivos que está procesando contiene un carácter de nueva línea en su nombre de archivo. Esto es particularmente importante si alguna vez escribes un script que procesará archivos que no has creado tú mismo (ya que no sabrás cómo se nombran). Consulte Por qué no debe analizar la salida de ls (1) para obtener más información.

    
respondido por el fractal_sounds 31.10.2017 - 23:10

Lea otras preguntas en las etiquetas