假设有一个目录,foo
其中有文件:
$ ls
001.mp4
002.mp4
在另一个目录中时,bar
我希望拥有与目录中相同的文件,bar
但是文件为空。到目前为止,我尝试过:
当bar
我执行时:
$ find ../foo -type f |xargs -0
我得到:
../foo/001.mp4
../foo/002.mp4
这给了我一个文件列表,但带有相对路径,而我只需要文件名(带有扩展名)。
答案1
这将完成这项工作:
在bar
运行以下命令时将/PATH_TO/foo/
实际路径更改为foo
:
ls -p /PATH_TO/foo/ | grep -v / | tr [:blank:] '_' | xargs touch
解释:
ls -p
将列出所有文件和目录在路径目录中,该选项将在目录名称中-p
添加。/
tr [:blank:] '_'
将用 替换文件名中的每个空格,_
否则touch
可能无法创建名称中带有空格的文件。grep -v /
将通过删除名称中包含的所有项目来排除目录,/
仅在输出中留下文件名。xargs touch
将在 中创建空文件,bar
其名称与 在 中找到的所有文件名重复foo
。
注意:
在某些情况下解析输出ls
也许可以更好地避免。
答案2
也许存在更简单的方法,但这里我是如何得到您期望的结果的:
find ../foo -type f | while read i ; do basename "$i" ; done
答案3
您可以尝试以下操作:
find ../foo -type f -exec sh -c 'touch $(basename {})' \;