Это не так, потому что, как указывали другие, рассматриваемое поведение зависит от оболочки. Как вы (ОП) указали, это немного педантичная, может быть даже юмористическая, своего рода тема.
Однако в системах GNU у вашей исходной предпосылки есть и другое решение: cp --no-preserve=all file1 file2
. Попробуйте это, я думаю, что это удовлетворит вашу описанную ситуацию (например, изменение содержимого file2
без изменения его атрибутов).
Example:
$ ls -l
total 8
-rw-r--r-- 1 tniles sambashare 16 Dec 16 12:21 fezzik
-rw-r--r-- 1 tniles tniles 14 Dec 16 12:16 fred
$ cat *
Lookout, world!
Hello, world!
$ cp --no-preserve=all fred fezzik
$ ls -l
total 8
-rw-r--r-- 1 tniles sambashare 14 Dec 16 12:22 fezzik
-rw-r--r-- 1 tniles tniles 14 Dec 16 12:16 fred
$ cat *
Hello, world!
Hello, world!
UPDATE
На самом деле, я только что заметил, что cp
в моей системе сам по себе, похоже, сохраняет атрибуты, если не указаны -a
или -p
. Я использую оболочку bash и GNU coreutils. Думаю, каждый день узнаешь что-то новое...
Результаты теста (по Wildcard), включая жесткую ссылку и различные разрешения:
$ ls -li
total 12
913966 -rw-rw-r-- 1 vagrant vagrant 30 Dec 16 20:26 file1
913965 -rwxrw---- 2 pete vagrant 39 Dec 16 20:35 file2
913965 -rwxrw---- 2 pete vagrant 39 Dec 16 20:35 hardlinktofile2
$ cat file1
This is the contents of file1
$ cat file2
This is the original contents of file2
$ cp file1 file2
$ ls -li
total 12
913966 -rw-rw-r-- 1 vagrant vagrant 30 Dec 16 20:26 file1
913965 -rwxrw---- 2 pete vagrant 30 Dec 16 20:37 file2
913965 -rwxrw---- 2 pete vagrant 30 Dec 16 20:37 hardlinktofile2
$ cat file1
This is the contents of file1
$ cat file2
This is the contents of file1
$
Вы можете использовать sed
с несколькими входными файлами:
sed 'what/you/wanna/do' file1 file2 file3
sed 'what/you/wanna/do' file*
sed 'what/you/wanna/do' *.txt
sed 'what/you/wanna/do' $(find | grep \.ext)
Чтобы сохранить изменения, вместо вывода их на стандартный вывод используйте параметр-i
(вместо):
sed -i 'what/you/wanna/do' $(find | grep \.ext)