Как делать аннотированные скриншоты только с помощью клавиатуры?

for filename in "$1"/*; do
    if [ -f "$filename" ] &&
       [ "${filename%.old}" = "$filename" ]
    then
        mv -- "$filename" "$filename.old"
    fi
done 

Используйте grepдля текста и используйте вывод lsдля чтения глазами, а не в качестве входных данных для программы.

Ошибка, которую вы получаете, связана с синтаксической ошибкой в ​​вашем коде. Синтаксис цикла for(для перебора нескольких слов )таков:

for variable in word-list; do...; done

Код вверху будет циклически перебирать все обычные файлы в каталоге, указанном в $1, и присваивать им суффикс имени файла .old, если у них его еще нет. Два теста проверяют, относится ли $filenameк обычному файлу (или символической ссылке к одному из них ), и остается ли $filenameпри удалении .oldиз конца его значения прежним (. т.е. имеет ли он уже суффикс или нет ).

Другой способ сделать более или менее то же самое с помощьюfind:

find "$1" -maxdepth 1 -type f ! -name '*.old' -exec mv {} {}.old ';'

Обратите внимание, что оба решения будут перезаписывать любой уже существующий файл .old, если есть соответствующее имя файла без суффикса .old. Если бы существовал каталог с суффиксом .oldпод $1, файл был бы помещен в этот каталог, а не переименован.

Разница между решением findи циклом оболочки заключается в том, что решение findтакже заботится о скрытых именах, а цикл оболочки переименовывает символические ссылки в обычные файлы.

Связанные:

1
28.03.2020, 23:42
0 ответов

Теги

Похожие вопросы