创建与给定目录中名称完全相同的文件

创建与给定目录中名称完全相同的文件

假设有一个目录,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 {})' \;

相关内容