我的父文件夹包括子文件夹。在每个子文件夹中,都有以下文件夹:
Parent_folder
folder1
folder_01_PAP_515151
folder_02_PAPA_554651
folder_03_PAPX_541313
folder_04_PAP_654123
folder2
folder_20_PAP_413513
folder_02_PAPD_521354
folder_055_PAP_685413
folder_100_PAP_132312
folder3
folder_11_PAPE_5313351
folder_32_PAP_3513131
folder_53_PAP_3213321
folder_84_PAP_3313213
..
我使用以下命令列出了所有包含“ PAP ”的文件夹和子文件夹,并将其保存在文本文件“ list.txt”中
find -type d -name "*_PAP_" > list.txt
输出如下:
./folder1/folder_01_PAP_515151
./folder1/folder_04_PAP_654123
./folder1/folder_20_PAP_413513
./folder2/folder_055_PAP_685413
./folder2/folder_100_PAP_132312
./folder3/folder_32_PAP_3513131
./folder3/folder_53_PAP_3213321
./folder3/folder_84_PAP_3313213
从这个列表中,我想创建一个新文件夹,这些新文件夹的名称必须包含“三个数字_PAP”部分,例如,上一个列表中的“ 055_PAP”,“ 32_PAP”,“ 53_PAP”...。新生成的文件夹的列表必须为:
01_PAP
04_PAP
20_PAP
055_PAP
100_PAP
32_PAP
53_PAP
84_PAP
如果您有一个文件(名为,list
包含以下内容),并且用来为文件中的每个行名创建一个目录,其中目录名仅位于./folder?/folder_
。之后。
./folder1/folder_01_PAP_515151
./folder1/folder_04_PAP_654123
./folder2/folder_055_PAP_685413
./folder2/folder_100_PAP_132312
./folder3/folder_32_PAP_3513131
./folder3/folder_53_PAP_3213321
./folder3/folder_84_PAP_3313213
那你就可以做。
cat list | sed -r -e 's~[.]/folder[0-9]+/folder_~~' | xargs -I{} mkdir -p «prefix»{}
如果您只想重命名原始文件夹/目录,并保留原始内容,则可以执行以下操作:
用这个测试。然后从重-n
命名中删除,以实现它的真实效果。
find . -type d -name "*_PAP_" | rename -n 's~[.]/folder[0-9]+/folder_~~'
注意搜索模式是相同的rename
,因为它是sed
。rename
适用于文件名,sed
适用于文件或流。
的选项sed
:
-r
使用扩展的正则表达式(要使用的正则方言)。-e
下一个arg是表达式(sed程序)。's~[.]/folder[0-9]+/folder_~~'
用引号引起来的表达式,以便外壳程序不解释它。表达式说明: s~[.]/folder[0-9]+/folder_~~
s
搜索并替换~
分隔符将表达式分为几部分,您可以使用任何字符,但每次都必须使用相同的字符。s~«search_for»~«replace_with»~«options»
或使用其他字符s@«search_for»@«replace_with»@«options»
。[.]
一个点/folder
正如它所说的那样。[0-9]
一个数字。+
一个或多个前面的原子(数字)(所以一个或多个数字)。/folder_
正如它所说的那样。i
忽略大小写,要g
重复做一次以上(不仅是找到第一个字符串)。该sed
/rename
语言非常强大,但复杂。您将使用的主要部分s
(如此处所用),也许接下来y
是值得学习的部分。您还必须学习正则表达式(也由grep和其他命令使用)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句