Creación de scripts en Shell: ¿por qué solo el guión "-" arroja un error?

Objetivo: limpiar

Truncar selectivamente nombres de files en mi carpeta de notas nvALT. Traté de usar la sugerencia de un blogger de productividad (que me elude después de una búsqueda exhaustiva) para anteponer ^ > - + a los nombres de file, pero no funciona para mí. ¡Es hora de limpiar la casa! Sin embargo, necesito asegurarme de no cortar ningún carácter alfa en los nombres de files que no usan esos prefijos. Además, estoy aprendiendo scripting y ¡creo que es divertido!

Guión de shell

Esto es lo que tengo:

  • ¿Cómo ejecutar un script de shell desde un AppleScript?
  • ¿Cómo instalar un cliente FTP desde la línea de command en Mac?
  • ¿Cómo creo un script para crear / modificar counts de administrador locales?
  • Necesita ayuda para solucionar problemas de un script de shell que no se iniciará (sí, los permissions son 755)
  • ¿Cómo instalar 'MySQL Utilities' usando brew o brew cask?
  • cómo comstackr Marble (KDE) en macOS? No hay package preconstruido disponible
  •  #!/bin/bash cd ~/dropbox/notes_test for f in *; do FILENAME=$(basename "$f") DIRNAME=$(dirname "$f") if [[ "$f" == \^\ * ]]; then mv "$f" "${DIRNAME}/${FILENAME:2}" fi if [[ "$f" == \+\ * ]]; then mv "$f" "${DIRNAME}/${FILENAME:2}" fi if [[ "$f" == \>\ * ]]; then mv "$f" "${DIRNAME}/${FILENAME:2}" fi if [[ "$f" == \-\ * ]]; then mv "$f" "${DIRNAME}/${FILENAME:2}" fi done 

    Problema: el guion

    Aquí está la input de la línea de command y el post de error. Obtengo uno de estos para cada nombre de file que comienza con "-".

     DEV0041:scripts n$ ./truncate.sh basename: illegal option -- usage: basename string [suffix] basename [-a] [-s suffix] string [...] dirname: illegal option -- usage: dirname path mv: illegal option -- usage: mv [-f | -i | -n] [-v] source target mv [-f | -i | -n] [-v] source ... directory 

    Pregunta: ¿Por qué el guión, y solo el guión, arroja un error?

    ¿Y cómo solucionar este problema?

  • ¿Cómo boost el tamaño del cursor programáticamente?
  • ¿Cómo puedo dormir la pantalla desde la Terminal?
  • Comandos de terminal para "Aplicación Windows" y "Mostrar escritorio" en Mountain Lion
  • ¿Cuál es el equivalente del command de tree de Unix en OSX?
  • Cómo hacer que MacVim cargue automáticamente ~ / .vim / syntax
  • Tubería de commands múltiples
  • One Solution collect form web for “Creación de scripts en Shell: ¿por qué solo el guión "-" arroja un error?”

    Desde la página man para mv , el primer argumento (y posiblemente el segundo) en la command-line, si comienza con a - , es una opción y no un file. Solo -f | -i | -n -f | -i | -n -f | -i | -n son opciones permitidas.

    La forma más sencilla es no usar - en un nombre de file, confundirá a otros progtwigs de línea de command, dado que anteponer - es una solución alternativa para otra cosa, simplemente no usaría ese carácter.

    Si esta no es una opción, puede volver a escribir los commands mv esta manera

     mv ./"$f" "${DIRNAME}/${FILENAME:2}" 

    o (un poco más genérico porque también funciona para routes absolutas)

     mv -- "$f" "${DIRNAME}/${FILENAME:2}" 

    Otra opción (y es lo que haría para cualquier script de bash de más de unas pocas líneas) es escribir en un lenguaje de scripting como perl o python; en este caso, resuelven el problema con sus funciones de movimiento sin pasar los nombres de file a mv

    Loving Apple Products like poisoning (iPhone, iPad, iMac, Macbook, iWatch).