我x.tar
在目录中有一个文件/a
。解压后x.tar
得到以下结果:
cust/
cust/01/
cust/01/INFENG/
cust/01/INFENG/scr/
cust/01/INFENG/scr/test.scr
cust/01/INFENG/SQL/
cust/01/INFENG/SQL/test.sql
cust/01/INFENG/MRT/
该目录是使用给定的目录结构cust
创建的。/a
现在我需要做的是保护路径中存在的现有文件,然后将它们替换为/a
.那么如何通过 shell 脚本来实现这一点呢?
cust/01/INFENG/scr/test.scr
例如,在用我通过解压 .tar 文件得到的文件替换(现有的)之前,我必须保证其安全/a
。
我在用ksh
。
答案1
你可以试试这个:
#!/usr/bin/env ksh
a_files=( $(find /path/to/a/ -type f) )
for file in "${a_files[@]}"; do
mv "/path/to/app${file##*a}" "/path/to/app${file##*a}.bak"
mv "$file" "/path/to/app${file##*a}"
done
如果a/
和app/
位于同一目录中,例如/home/user/{a,app}
,则:
#!/usr/bin/env ksh
a_files=( $(find /home/user/a/ -type f) )
for file in "${a_files[@]}"; do
mv "${file%%a/*}app${file##*/a}" "${file%%a/*}app${file##*/a}.bak"
mv "$file" "${file%%a/*}app${file##*/a}"
done
这将首先备份/home/user/app/
as.bak
扩展名的文件,然后用/home/user/a
.
答案2
这可能对你有用:
#!/bin/bash
#
cd /a || exit
find . -type f |
while read FILE
do
TARGET="/app/$FILE"
test -f "$TARGET" && cp -fp "$TARGET" "$TARGET.bak"
mv "$FILE" "$TARGET"
done