Answers:
在F1上方的目录中运行以下脚本:
该脚本的目的是避免在照片目录下创建多余的照片目录。
同样,它的设计是防止在错误的位置(例如用户的根目录)中意外运行它,而它不会看到该F1
目录,并在错误的宫殿中错误地创建了数百张照片目录。
另外,我的目的是使脚本易于使用,以便用户对其进行自定义。
#!/bin/bash
while IFS= read -r -d '' i;
do
if [[ ! -d $i/Photo ]]; then
# Filter to skip folders named Photo
thisfolder="$(echo $i | sed "s/.*\///")"
if [[ ! $thisfolder == "Photo" ]]; then
mkdir "$i/Photo"
fi
fi
done < <(find F1 -type d -print0)
脚本已更新:
p
中photo
为大写。ls
未解析@Arronical 。只是反馈给用户...显示正在发生的事情。就像“这是照片目录”一词一样。让用户知道为什么不在那里创建目录。
find -type d F1
, 也许?
$i/Photo
,但是OP没有指定在这种情况下应执行的操作。在$i
s之一包含换行符的情况下,它也将失败,这种情况是不太可能发生的。
您可以使用一个find
电话来实现。
find . -name 'Photo' -prune -o -type d -exec mkdir {}/Photo \;
该部分-name 'Photo' -prune -o
指示不要递归到现有(和新创建的)Photo
目录:如果找到的文件(或目录)具有名称Photo
,请停止对其进行处理(-prune
)。在其他情况下(-o
),继续目录(-type d
)并执行(-exec
)命令。
-prune
?:)是的,这很违反直觉,但值得学习。
-type d
与-name 'Photo'
before 一起指定来更改此设置-prune
。
find
将继续使用其他文件夹(如果需要的话,包括该文件夹的子文件夹)。
您可以将find
结果传递给,while
而不是for
因为这样,如果文件名包含空格,它将不会中断
首先cd到目录F1
,然后执行:
find -type d | while read dir ; do mkdir "$dir"/Photo ; done
如果该目录存在,mkdir
将拒绝创建它,所以那里没有问题...
如果您的目录名称可能包含换行符或其他奇特的奇怪字符,请使用此名称处理任意名称:
find -type d -print0 | while IFS= read -r -d '' dir ; do mkdir "$dir"/Photo ; done
感谢@terdon在此方面的帮助:)
F1
目录为~user/Pictures
,则移动到父目录并运行该行将Photo
在其空间中的每个目录中放置一个目录,该目录可能是数千个。考虑在命令行中添加,F1
以避免容易犯的错误。这样,如果不经意间从错误的位置运行,它将不会创建目录。
F1
改用@LDJames
Python with os.walk
只需几行代码就可以相当轻松地做到这一点
$ mkdir dir_one dir_two
$ mkdir dir_two/dir_three
$ python -c 'import os;[os.mkdir(r + "/Pictures") for r,d,f in os.walk(".")]'
$ tree
.
├── dir_one
│ └── Pictures
├── dir_two
│ ├── dir_three
│ │ └── Pictures
│ └── Pictures
└── Pictures
我们正在处理的命令是:python -c'import os; [os.mkdir(r +“ / Pictures”)for os.walk(“。”)]中的r,d,f
在这里,我们简单地调用带-c
标志的python解释器来指定我们在单引号内给出的命令。os.walk()
函数允许我们递归地遍历所有子目录,对于每个子目录(由表示r
),我们通过os.mkdir()
函数创建Pictures文件夹。r+"/Pictures"
只是一种简单的字符串操作,它将子目录字符串和“ / Pictures”字符串连接在一起以形成一个路径
将“ /图片”替换为“ /照片”以符合您的要求
如果您使用的是bash,则只需运行:
shopt -s globstar
for d in **/; do mkdir -p "$d"/Photo; done
该globstar
选项使**
“所有文件以及0个或多个目录和子目录”匹配。换句话说,它以递归方式匹配所有内容。由于/
结尾处,**/
将匹配所有目录和子目录(无文件)。因此,$d
将遍历当前目录及其子目录中的所有目录,并将Photos
在每个目录中创建目录。
该-p
旗mkdir
方式:
-p, --parents
no error if existing, make parent directories as needed
在这里,如果目标目录已经存在,我只是用它来抑制错误消息。如果要查看错误,请删除它。
请注意,这将无法Photo
在包含名为Photo 的文件的目标目录中创建子目录。您还没有指定在这种情况下应采取的措施,并且到目前为止发布的所有其他答案也有此限制。