简体   繁体   English

Linux命令/脚本替换文件夹/目录

[英]Linux command/script replacing folders/directories

I have the following folder setup on an ubuntu machine: 我在ubuntu机器上安装了以下文件夹:
(brackets indicate folder) (方括号表示文件夹)

[main]
   |
   |--- [old]
   |      |
   |      |--- [thequick]
   |      |           |
   |      |           |--- [aaaa] --- some files
   |      |           |--- [bbbb] --- some files
   |      |           |--- [cccc] --- some files
   |      |           |--- [dddd] --- some files
   |      |           |--- some files
   |      |
   |      |--- [brownfox]
   |      |           |
   |      |           |--- [aaaa] --- some files
   |      |           |--- [bbbb] --- some files
   |      |           |--- [cccc] --- some files
   |      |           |--- [dddd] --- some files
   |      |           |--- some files
   |      |---  ...
   |      |
   |      |--- [lazydog]
   |                  |
   |                  |--- [aaaa] --- some files
   |                  |--- [bbbb] --- some files
   |                  |--- [cccc] --- some files
   |                  |--- [dddd] --- some files
   |                  |--- some files
   |
   |--- [new]
          |
          |--- [thequick]
          |           |
          |           |--- [aaaa] --- some files
          |           |--- [bbbb] --- some files
          |           |--- some files
          |
          |--- [brownfox]
          |           |
          |           |--- [aaaa] --- some files
          |           |--- [bbbb] --- some files
          |           |--- some files
          |---  ...
          |
          |--- [lazydog]
                      |
                      |--- [aaaa] --- some files
                      |--- [bbbb] --- some files
                      |--- some files

I need to find a quick way to replace all old [aaaa] and [bbbb] folders by their respective new [aaaa] and [bbbb] folders, without affecting any other old stuff. 我需要找到一种快速方法,将所有旧的 [aaaa]和[bbbb]文件夹替换为它们各自的 [aaaa]和[bbbb]文件夹, 而又不影响任何其他旧的东西。

You can do: 你可以做:

cd /main/old
find . -type d \( -name 'aaaa' -o -name '-bbbb' \) -exec cp -RfP {} ../new/{} \;

This is explicit and very standard 这是明确且非常标准的

cd main/old
for dir in `find . \( -name aaaa -o -name bbbb \) -a -type d`
do
    (
    cd ..
    if [ -d new/$dir ]
    then
        rm -rf old/$dir
        mv new/$dir old/$dir
    fi
    )
done
cd ../..

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM