Как переименовать несколько файлов, добавив общую строку в начало файлов?

Я изменил sed и заменил одинарные кавычки на двойные и добавил \ t для вставки табуляции

sed "/^tmpfs/ s/defaults.*$/defaults,size=${MEM_SZ}G\t 0 0/" /etc/fstab
2
31.08.2017, 17:02
3 ответа

Вы можете использовать команду переименования; проверьте, установили ли вы его в своей системе, или установите его с помощью диспетчера пакетов ОС

[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]#

и вуаля :)

0
27.01.2020, 21:55
$ 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
2
27.01.2020, 21:55

Вы должны использовать цикл для изменения имени нескольких файлов:

for file in *
do
    mv -v ${file} new_${file}
done

Тот же код в одну строку:

for file in *; do mv -v ${file} new_${file}; done
5
27.01.2020, 21:55

Теги

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