mirror of
https://github.com/freebsd/freebsd-src
synced 2024-07-08 20:26:31 +00:00
cp: Add -N flag, inspired by NetBSD's similar flag
Add -N to supress copying of file flags when -p is specified (explicitly or implicitly). Often times we don't care about the flags or wish to be able to copy to NFS, and this comes in handy for that. FreeBSD's and NetBSD's cp are somewhat different, so I had to reimplement all but one of the patch hunks... Obtained from: NetBSD (cp.1 1.25, cp.c 1.37, utils.c 1.28 by elad) Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D42673
This commit is contained in:
parent
69ae43a1e6
commit
5a52e3d00d
14
bin/cp/cp.1
14
bin/cp/cp.1
|
@ -29,7 +29,7 @@
|
|||
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.Dd February 23, 2022
|
||||
.Dd December 7, 2023
|
||||
.Dt CP 1
|
||||
.Os
|
||||
.Sh NAME
|
||||
|
@ -42,7 +42,7 @@
|
|||
.Op Fl H | Fl L | Fl P
|
||||
.Oc
|
||||
.Op Fl f | i | n
|
||||
.Op Fl alpsvx
|
||||
.Op Fl alNpsvx
|
||||
.Ar source_file target_file
|
||||
.Nm
|
||||
.Oo
|
||||
|
@ -50,15 +50,15 @@
|
|||
.Op Fl H | Fl L | Fl P
|
||||
.Oc
|
||||
.Op Fl f | i | n
|
||||
.Op Fl alpsvx
|
||||
.Op Fl alNpsvx
|
||||
.Ar source_file ... target_directory
|
||||
.Nm
|
||||
.Op Fl f | i | n
|
||||
.Op Fl alPpsvx
|
||||
.Op Fl alNPpsvx
|
||||
.Ar source_file target_file
|
||||
.Nm
|
||||
.Op Fl f | i | n
|
||||
.Op Fl alPpsvx
|
||||
.Op Fl alNPpsvx
|
||||
.Ar source_file ... target_directory
|
||||
.Sh DESCRIPTION
|
||||
In the first synopsis form, the
|
||||
|
@ -88,6 +88,10 @@ option is specified, symbolic links on the command line are followed.
|
|||
If the
|
||||
.Fl R
|
||||
option is specified, all symbolic links are followed.
|
||||
.It Fl N
|
||||
When used with
|
||||
.Fl p ,
|
||||
suppress copying file flags.
|
||||
.It Fl P
|
||||
No symbolic links are followed.
|
||||
This is the default if the
|
||||
|
|
|
@ -72,7 +72,7 @@ static char emptystring[] = "";
|
|||
|
||||
PATH_T to = { to.p_path, emptystring, "" };
|
||||
|
||||
int fflag, iflag, lflag, nflag, pflag, sflag, vflag;
|
||||
int Nflag, fflag, iflag, lflag, nflag, pflag, sflag, vflag;
|
||||
static int Hflag, Lflag, Rflag, rflag;
|
||||
volatile sig_atomic_t info;
|
||||
|
||||
|
@ -91,7 +91,7 @@ main(int argc, char *argv[])
|
|||
|
||||
fts_options = FTS_NOCHDIR | FTS_PHYSICAL;
|
||||
Pflag = 0;
|
||||
while ((ch = getopt(argc, argv, "HLPRafilnprsvx")) != -1)
|
||||
while ((ch = getopt(argc, argv, "HLNPRafilnprsvx")) != -1)
|
||||
switch (ch) {
|
||||
case 'H':
|
||||
Hflag = 1;
|
||||
|
@ -101,6 +101,9 @@ main(int argc, char *argv[])
|
|||
Lflag = 1;
|
||||
Hflag = Pflag = 0;
|
||||
break;
|
||||
case 'N':
|
||||
Nflag = 1;
|
||||
break;
|
||||
case 'P':
|
||||
Pflag = 1;
|
||||
Hflag = Lflag = 0;
|
||||
|
|
|
@ -36,7 +36,7 @@ typedef struct {
|
|||
} PATH_T;
|
||||
|
||||
extern PATH_T to;
|
||||
extern int fflag, iflag, lflag, nflag, pflag, sflag, vflag;
|
||||
extern int Nflag, fflag, iflag, lflag, nflag, pflag, sflag, vflag;
|
||||
extern volatile sig_atomic_t info;
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
|
|
@ -349,7 +349,7 @@ setfile(struct stat *fs, int fd)
|
|||
rval = 1;
|
||||
}
|
||||
|
||||
if (!gotstat || fs->st_flags != ts.st_flags)
|
||||
if (!Nflag && (!gotstat || fs->st_flags != ts.st_flags))
|
||||
if (fdval ?
|
||||
fchflags(fd, fs->st_flags) :
|
||||
(islink ? lchflags(to.p_path, fs->st_flags) :
|
||||
|
|
Loading…
Reference in New Issue
Block a user