У меня есть несчастье прийти из MS-DOS, но, по крайней мере, это заставляет меня понять, насколько мощнее Linux. Я работал над приведением Linux-Fu в нормальное состояние, но есть пара вещей, которые можно было бы сделать с DOS, но я не уверен, как лучше всего добиться этого с Linux:
Переименование нескольких файлов - с использованием двух подстановочных знаков
c:\> dir
Directory of c:\
file1.txt
file2.txt
file3.txt
file4.txt
c:\>rename *.txt *.bak
c:\> dir
Directory of c:\
file1.bak
file2.bak
file3.bak
file4.bak
Я знаю, что мог бы использовать find -exec
здесь, но возможно ли использовать более короткий синтаксис - возможно, mv
с некоторыми специальными флагами или синтаксисом? Я предполагаю, что ключ к этому - второй *
подстановочный знак, так как у linux не должно быть проблем с первым (т.е. я знаю, как выбрать файлы, которые я хочу переименовать, используя подстановочные знаки)
Переименование одного файла - с использованием одного подстановочного знака
c:\> dir
Directory of c:\
file1.txt
c:\>rename file1.txt *.bak
c:\> dir
Directory of c:\
file1.bak
Это было бы особенно полезно при переименовании длинных и громоздких имен файлов. Я подумал, что, возможно, я мог бы использовать mv file1.txt $1.bak
в конечном итоге, file1.txt.bak
что также было бы приемлемо, но я не уверен, что вы можете ссылаться на $1
параметр inline с помощью команды оболочки. Опять же, в этом конкретном случае просто удобно, как ms-dos убивает *
подстановочный знак, который будет использоваться как своего рода совпадение захвата / замены для части имени файла.
Фильтрация списков каталогов с помощью подстановочного знака
c:\> dir
Directory of c:\
file1.txt
file2.txt
file3.txt
file4.txt
text.txt
\temp (directory)
c:\> dir file*
Directory of c:\
file1.txt
file2.txt
file3.txt
file4.txt
c:\> t*
Directory of c:\
text.txt
\temp (directory)
Я не уверен, что правильный синтаксис для этого ls
, или если это вообще возможно. Если я сделаю что-то подобное ls t*
, я начну с каталогов t
. Мой обходной путь либо использовал, find . --max-depth 1 -iname "t*"
либо что-то в этом роде ls -al | grep t
- ни один из них не такой короткий и простой, как dir t*
есть.
Наконец, я знаю, что могу настроить псевдонимы, чтобы сделать эти длинные команды короче, но я хотел бы изучить некоторые из готовых linux-fu для этих вещей, потому что иногда вы подключены к удаленной системе или работаете на новой машине.
Так как же я могу mv
и ls
файлы так же, как я dir
и rename
файлы?