TL; DR:我希望所有2.6都说2.7
lib
└── python2.6
└── site-packages
├── x
│ ├── x.py
│ ├── x.pyc
│ ├── __init__.py
│ ├── __init__.pyc
│ └── test
│ ├── __init__.py
│ └── __init__.pyc
└── x-0.2.0-py2.6.egg-info
├── dependency_links.txt
├── entry_points.txt
├── PKG-INFO
├── requires.txt
├── SOURCES.txt
└── top_level.txt
我尝试过的事情:
find . -type d -name "*2.6*" -exec bash -c 'mv "$1" "${1/2.6/2.7}"' -- {} \;
显然,这是行不通的,因为它看到了主文件夹,将其移动,然后看到了嵌套的文件夹并尝试将其移动,但是该位置不再存在,并说no such file or directory
是否有一个很好的方法来进行嵌套查找和移动?在这种情况下,我可以只运行两次命令,从技术上讲可以正常运行,但是感觉很脏。
此外,我知道这可能会破坏软件包的版本,或者我可以这样做
find . -type d -name "*python2.6*" -exec bash -c 'mv "$1" "${1/2.6/2.7}"' -- {} \;
find . -type d -name "*py2.6*" -exec bash -c 'mv "$1" "${1/2.6/2.7}"' -- {} \;
但是我更感兴趣的是学习bash是否有一种通用的方法来解决这个问题,而不是如何处理这种狭窄的情况。
答案 0 :(得分:2)
您可以先进入深度,然后仅替换基名:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("K:K")) Is Nothing Then Exit Sub
If Target.Value <> "2" Then Exit Sub
Target.EntireRow.Interior.ColorIndex = 8
MsgBox "2nd First Article Build. Notify Quality Techs to Create Fixture "
End Sub
如果您使用find lib -depth -type d -name "*2.6*" -exec \
bash -c 'basename="${1##*/}" && mv "$1" "${1%/*}/${basename/2.6/2.7}"' -- {} \;
来运行它,则为:
echo
在使用以下命令创建的树上
find lib -depth -type d -name "*2.6*" -exec \
bash -c 'bn="${1##*/}" && echo mv "$1" "${1%/*}/${bn/2.6/2.7}"' -- {} \;
即,在:
mkdir -p lib/python2.6/site-packages/{x/test,x-0.20-py2.6.egg-info}
您得到:
lib/
└── python2.6
└── site-packages
├── x
│ └── test
└── x-0.20-py2.6.egg-info
消除回声,移动应无错误。