Я изменил sed и заменил одинарные кавычки на двойные и добавил \ t для вставки табуляции
sed "/^tmpfs/ s/defaults.*$/defaults,size=${MEM_SZ}G\t 0 0/" /etc/fstab
Вы можете использовать команду переименования; проверьте, установили ли вы его в своей системе, или установите его с помощью диспетчера пакетов ОС
[root@archy pippo]# rename -h
Usage:
rename [options] <expression> <replacement> <file>...
Rename files.
Options:
-v, --verbose explain what is being done
-s, --symlink act on the target of symlinks
-h, --help display this help and exit
-V, --version output version information and exit
For more details see rename(1).
, в вашем случае вы должны сделать эту простую замену
[root@archy pippo]# ls -lrta
total 8
drwxr-x--- 6 root root 4096 Aug 31 14:12 ..
-rw-r--r-- 1 root root 0 Aug 31 14:12 file1.txt
-rw-r--r-- 1 root root 0 Aug 31 14:12 file2.txt
-rw-r--r-- 1 root root 0 Aug 31 14:12 file3.txt
-rw-r--r-- 1 root root 0 Aug 31 14:12 file4.txt
drwxr-xr-x 2 root root 4096 Aug 31 14:24 .
[root@archy pippo]# rename -v file new_file *.txt
`file1.txt' -> `new_file1.txt'
`file2.txt' -> `new_file2.txt'
`file3.txt' -> `new_file3.txt'
`file4.txt' -> `new_file4.txt'
[root@archy pippo]# ls -lrta
total 8
drwxr-x--- 6 root root 4096 Aug 31 14:12 ..
-rw-r--r-- 1 root root 0 Aug 31 14:12 new_file1.txt
-rw-r--r-- 1 root root 0 Aug 31 14:12 new_file2.txt
-rw-r--r-- 1 root root 0 Aug 31 14:12 new_file3.txt
-rw-r--r-- 1 root root 0 Aug 31 14:12 new_file4.txt
drwxr-xr-x 2 root root 4096 Aug 31 14:27 .
[root@archy pippo]#
и вуаля :)
$ find . -type f -name "file*.txt" -execdir mv {} new_{} \;
Это найдет все обычные файлы в текущем каталоге (или ниже), имена которых соответствуют шаблону file*.txt
, и переименует их, добавив префикс new_
на их имена.
Для этого требуется find
, который понимает -execdir
(большинство современных find
реализаций понимают). Опция -execdir
работает аналогично -exec
, но выполняет утилиту (mv
) в каталоге найденной вещи. Также {}
будет содержать базовое имя найденной вещи.
Чтобы ограничиться текущим каталогом только, добавьте -maxdepth 1
где-то перед -execdir
.
bash-4.4$ mkdir dir{1..10}
bash-4.4$ touch dir{1..10}/file{1..10}.txt
bash-4.4$ ls
dir1 dir10 dir2 dir3 dir4 dir5 dir6 dir7 dir8 dir9
bash-4.4$ ls dir5
file1.txt file2.txt file4.txt file6.txt file8.txt
file10.txt file3.txt file5.txt file7.txt file9.txt
bash-4.4$ find . -name "file*.txt" -execdir mv {} new_{} \;
bash-4.4$ ls dir5
new_file1.txt new_file2.txt new_file4.txt new_file6.txt new_file8.txt
new_file10.txt new_file3.txt new_file5.txt new_file7.txt new_file9.txt
Вы должны использовать цикл для изменения имени нескольких файлов:
for file in *
do
mv -v ${file} new_${file}
done
Тот же код в одну строку:
for file in *; do mv -v ${file} new_${file}; done