以下命令找到了以下目錄。
$ find tmp/ -name "date=*" -type d
tmp/year=2022/month=05/date=27
tmp/year=2022/month=05/date=21
tmp/year=2022/month=05/date=29
tmp/year=2022/month=05/date=24
tmp/year=2022/month=05/date=31
tmp/year=2022/month=06/date=01
tmp/year=2022/month=06/date=02
我需要通過替換為來重命名date=目錄day=。
find tmp/ -name "date=*" -type d -exec rename s/date=/day=/g "{}" ;
但是,該命令不會重命名目錄?
我需要在 Python 中實作它。
uj5u.com熱心網友回復:
rename實用程式不是標準 Unix 工具/實用程式的一部分,并且有不同的風格。
我可能會建議堅持bash并mv使用這個find命令:
find tmp -name "date=*" -type d -exec bash -c '
for f;do echo mv "$f" "${f/date=/day=}"; done' _ {}
我之前保留echo了mv供您測驗。一旦對輸出感到滿意,只需echo從上面的命令中洗掉。
uj5u.com熱心網友回復:
如果您使用的是 Python 3.4 ,則可以使用pathlib:
from pathlib import Path
tmp = Path('tmp')
for o in tmp.rglob('date=*'):
if o.is_dir():
o.rename(o.with_name(o.name.replace('date', 'day')))
要解決您在帖子評論中提到的問題,您可以檢查目標目錄是否已經存在,然后按照您想要的方式解決它。像這樣的東西:
from pathlib import Path
tmp = Path('tmp')
for o in tmp.rglob('date=*'):
new_name = o.with_name(o.name.replace('date', 'day'))
if o.is_dir():
if new_name.exists():
# Your logic to work around a directory
# that already exists goes here
else:
o.rename(new_name)
上面的代碼只是一個初步的想法。它需要很多改進才能變得更可靠。
uj5u.com熱心網友回復:
無論如何,如果您想從 Python 中執行此操作,則不需要子行程。
import os
for curdir, dirs, files in os.walk("/tmp"):
for dirname in dirs:
if dirname.startswith("date="):
new = dirname.replace("date=", "day=")
os.rename(os.path.join(curdir, dirname), os.path.join(curdir, new))
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/487323.html
上一篇:提取由符號分隔的資料塊
