Linux 使用;触摸“;创建目录?
1) 在“A”目录中:Linux 使用;触摸“;创建目录?,linux,bash,Linux,Bash,1) 在“A”目录中: find . -type f > a.txt cat a.txt | while read FILENAMES; do touch "$FILENAMES"; done 2) 在“B”目录中: find . -type f > a.txt cat a.txt | while read FILENAMES; do touch "$FILENAMES"; done 3) 结果:2)“创建文件”[我的意思是仅使用相同的文件名,但大小为0字节]确定。但是如果“
find . -type f > a.txt
cat a.txt | while read FILENAMES; do touch "$FILENAMES"; done
2) 在“B”目录中:
find . -type f > a.txt
cat a.txt | while read FILENAMES; do touch "$FILENAMES"; done
3) 结果:2)“创建文件”[我的意思是仅使用相同的文件名,但大小为0字节]确定。但是如果“A”目录中有子目录,则2)无法在子目录中创建文件,因为子目录中没有目录。问题:
touch
可以创建目录吗?因为find
每行输出一个文件:
cat a.txt | while read file; do
if [[ "$file" = */* ]]; then
mkdir -p "${file%/*}";
fi;
touch "$file";
done
编辑:
如果在单独的步骤中创建目录,则效率会稍微提高:
cat a.txt | grep / | sed 's|/[^/]*$||' | sort -u | xargs -d $'\n' mkdir -p
cat a.txt | while read file; do
touch "$file";
done
而且,不,
touch
不能自己创建目录。不。为什么不直接使用mkdir而不是touch来创建目录?交叉帖子:@Peter:10个问题,8个答案。StackOverflow和SuperUser上的0个接受答案和0个向上投票。现在是交叉柱。唉……又一个。请不要这样做。超级用户是问这个问题的正确地方。如果一个问题符合多个站点的标准,则允许交叉发布,但在这种情况下,它更适合SU。创建所需的目录,然后创建文件将非常有用。将比运行两个命令更容易实现相同的目的。它是linux,我希望它是智能的;)