Introduction
Introduction Statistics Contact Development Disclaimer Help
cp: add -i flag - sbase - suckless unix tools
git clone git://git.suckless.org/sbase
Log
Files
Refs
README
LICENSE
---
commit 9e8b431075c0901a58dda7eee3f18d97095896ca
parent 8d07e5e8f639f3fabb45379786c9225f7312e6e5
Author: Thibaut Aubin <[email protected]>
Date: Thu, 10 Apr 2025 00:00:00 +0000
cp: add -i flag
Diffstat:
M README | 2 +-
M cp.1 | 6 ++++--
M cp.c | 5 ++++-
M fs.h | 1 +
M libutil/cp.c | 8 ++++++++
5 files changed, 18 insertions(+), 4 deletions(-)
---
diff --git a/README b/README
@@ -56,7 +56,7 @@ The following tools are implemented:
0=*|o cmp .
0#*|x cols .
0=*|o comm .
-0=*|o cp (-i)
+0=*|o cp .
0=*|x cron .
0#*|o cut .
0=*|o date .
diff --git a/cp.1 b/cp.1
@@ -1,4 +1,4 @@
-.Dd October 8, 2015
+.Dd April 10, 2025
.Dt CP 1
.Os sbase
.Sh NAME
@@ -6,7 +6,7 @@
.Nd copy files and directories
.Sh SYNOPSIS
.Nm
-.Op Fl afpv
+.Op Fl afipv
.Oo
.Fl R
.Op Fl H | L | P
@@ -37,6 +37,8 @@ and
If an existing
.Ar dest
cannot be opened, remove it and try again.
+.It Fl i
+Interactive prompt before overwrite.
.It Fl p
Preserve mode, timestamp and permissions.
.It Fl v
diff --git a/cp.c b/cp.c
@@ -7,7 +7,7 @@
static void
usage(void)
{
- eprintf("usage: %s [-afpv] [-R [-H | -L | -P]] source ... dest\n", arg…
+ eprintf("usage: %s [-afipv] [-R [-H | -L | -P]] source ... dest\n", ar…
}
int
@@ -16,6 +16,9 @@ main(int argc, char *argv[])
struct stat st;
ARGBEGIN {
+ case 'i':
+ cp_iflag = 1;
+ break;
case 'a':
cp_follow = 'P';
cp_aflag = cp_pflag = cp_rflag = 1;
diff --git a/fs.h b/fs.h
@@ -28,6 +28,7 @@ enum {
extern int cp_aflag;
extern int cp_fflag;
+extern int cp_iflag;
extern int cp_pflag;
extern int cp_rflag;
extern int cp_vflag;
diff --git a/libutil/cp.c b/libutil/cp.c
@@ -16,6 +16,7 @@
int cp_aflag = 0;
int cp_fflag = 0;
+int cp_iflag = 0;
int cp_pflag = 0;
int cp_rflag = 0;
int cp_vflag = 0;
@@ -42,6 +43,13 @@ cp(const char *s1, const char *s2, int depth)
return 0;
}
+ if (cp_iflag && access(s2, F_OK) == 0) {
+ if (!confirm("overwrite '%s'? ", s2)) {
+ cp_status = 1;
+ return 0;
+ }
+ }
+
if (cp_vflag)
printf("%s -> %s\n", s1, s2);
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.