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
。
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