我有5个空目录:
[X]$ ls
dir_1 dir_2 dir_3 dir_4 dir_5
如何在每个目录中创建一个文本文件,以便该文本文件包含其所在目录的名称?因此,例如,dir_1
将包含文本文件,file_1.txt
并且此文本文件dir_1
中dir_2
包含文本,包含包含文本的文本文件file_2.txt
,dir_2
依此类推。
我搜索了信息,但无法弄清楚。我最近开始学习linux。我是否必须做类似的事情:
find . -type d -exec touch (something?)
是否可以通过for循环来做到这一点?
for d in dir_*; do
printf "%s\n" "$d" > "$d/file_${d##*_}.txt"
done
$d
扩展到每个目录名称。${d##*_}
扩展到目录名称中的尾随数字,因为它会删除直到最后一个下划线的所有内容$d
。在BASH手册或POSIX规范的“参数扩展”部分中了解更多信息。printf "%s\n" "$d" > "$d/file_${d##*_}.txt"
将目录名称写入该目录中的txt文件。单线:
for d in dir_*; do printf "%s\n" "$d" > "$d/file_${d##*_}.txt"; done
我赞成这样做printf
,echo
因为在某些特殊情况下,前者可以正确处理,但后者不能正确处理,尽管在特定情况下echo
不会出现问题。在为什么printf比echo更好的内容中找到更多信息。。
如果您需要避免也以开头的非目录dir_
,则选项1是在上面的脚本中的语句[ -d "$d" ] &&
之前添加测试printf
。选择2是为了dir_*/
只匹配目录:
for d in dir_*/; do
dirn=${d%%/}
printf "%s\n" "$dirn" > "${d}file_${dirn##*_}.txt"
done
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句