我想在更新 ntpd 之前一次复制备份不同文件夹中的几个文件。
示例(仅限一个文件):sudo cp /usr/sbin/ntpd /usr/sbin/ntpd.old
文件:
/usr/bin/sntp
/usr/bin/ntp-keygen
/usr/bin/ntpq
/usr/sbin/ntpdc
/usr/sbin/ntpdate
/usr/sbin/ntpd
期望结果:
/usr/bin/sntp
/usr/bin/sntp.old
/usr/bin/ntp-keygen
/usr/bin/ntp-keygen.old
/usr/bin/ntpq
/usr/bin/ntpq.old
/usr/sbin/ntpdc
/usr/sbin/ntpdc.old
/usr/sbin/ntpdate
/usr/sbin/ntpdate.old
/usr/sbin/ntpd
/usr/sbin/ntpd.old
是否存在一个智能的单行程序来完成这个任务?
答案1
使用xargs
:
cat filelist | xargs -I {} cp {} {}.old
答案2
使用 shell 循环
类似于简单的循环,遍历两个目录然后匹配文件:
for dir in /usr/bin /usr/sbin; do
for file in "$dir/"*ntp*; do
sudo cp "$dir/$file" "$dir/$file.old"
done
done
这会将*ntp*
两个目录中与模式匹配的所有文件复制到同一个文件名,并.old
附加。
确保正确引用变量,以防止文件名称中带有空格。模式*ntp*
不能被引用,以便可以扩展它。
使用find
你也可以find
使用-exec
:
find /usr/bin /usr/sbin -type f -iname '*ntp*' -exec sudo cp {} {}.old \;
上述方法会更安全,因为它只在文件上运行 - 但您不希望有名为的目录ntp
,所以我想这没问题。