![使用“触摸”来创建目录?](https://linux22.com/image/1262291/%E4%BD%BF%E7%94%A8%E2%80%9C%E8%A7%A6%E6%91%B8%E2%80%9D%E6%9D%A5%E5%88%9B%E5%BB%BA%E7%9B%AE%E5%BD%95%EF%BC%9F.png)
1) 在“A”目录中:
find . -type f > a.txt
2) 在“B”目录中:
cat a.txt | while read FILENAMES; do touch "$FILENAMES"; done
3)
结果:2)“创建文件” [我的意思是只使用相同的文件名,但大小为 0 字节] 成功。但如果“A”目录中有子目录,则 2) 无法在子目录中创建文件,因为其中没有目录。
问题:有没有办法让“touch”创建目录?
答案1
您希望的最终结果是什么?
如果您尝试复制目录结构,有更简单的方法。首先想到的是同步解决方案。
例如
rsync -a /源/目录/ /目标/目录/ --include \*/ --exclude \*
这将重新创建整个目录结构。然后您可以运行 touch 命令来完成其余操作。
正如前面提到的,如果我们知道整个问题,我们也许能够找到更优雅的解决方案:)
答案2
你可以使用这个脚本。你需要使用chmod +x scriptname
#!/usr/bin/env ruby
# touchMakingDirs: a Ruby script to be able to touch a file and optionally create the directories necessary
# by Dan Rosenstark 2013-03-18
if __FILE__ == $0
if ARGV.length == 0
puts "Sorry, include one argument for filename"
exit
end
filename = ARGV[0]
puts "Will touch file #{filename}"
path = File.dirname(filename)
#filename = File.basename(filename)
`mkdir -p \"#{path}\"`
`touch \"#{filename}\"`
end
它在一些小测试中起作用了。如果我遗漏了测试用例,请告诉我。我的使用方式如下:touchMakingDirs blah/blah/whatever/who.txt
我将脚本命名为 touchMakingDirs 并将其放在我的路径中。