如何在目录中递归搜索不同文件?

如何在目录中递归搜索不同文件?

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

相关内容