我读到它们在手册页中代表递归。但是,我不确定他们在命令中的作用。当我尝试将一些空目录复制到另一个目录时,
$ cp EMPDIR DESTDIR
它不起作用,错误按摩cp: -r not specified; omitting directory 'empdir'
但是当我执行
$ cp -r or -R EMPDIR DESTDIR
有用。
-r 和 -R 的确切功能是什么?感谢您阅读:)
尝试做类似的事情(在伪 unix 中):
scp -r <pwd> [email protected]:~/<dirname of toplevel>
换句话说,我试图将我在本地的当前目录(和内容)复制到远程,同时将“pwd”命令输出的最后一个路径段粘贴到/home/user/<here>
远程。
我在我的 unix 命令中摇摇欲坠,所以我想这次我会询问与实验以避免损坏
使用构建的目录结构
#!/bin/bash
for name in A B
do
mkdir -p /tmp/src/${name}/copyme
echo "do not copy" > /tmp/src/${name}/no.txt
echo "copy" > /tmp/src/${name}/copyme/yes.txt
done
我只想将copyme
目录以及其中的文件镜像到 /tmp/tgt。
这应该很简单。依靠rsync
区分命令行选项的顺序:排除一切,然后包含相关模式。然而
rsync -av --exclude='*' --include='copyme' /tmp/src/ /tmp/tgt/
排除所有内容(仅创建目标目录)。为什么?
如何使用带有空格和单引号的递归目录和文件名进行快速文本替换?最好使用标准 UNIX 工具,或者使用众所周知的软件包。
使用find
对于许多文件来说非常慢,因为它为每个文件生成一个新进程,所以我正在寻找一种将目录遍历和字符串替换集成为一个操作的方法。
慢搜索:
find . -name '*.txt' -exec grep foo {} \;
快速搜索:
grep -lr --include=*.txt foo
慢换:
find . -name '*.txt' -exec perl -i -pe 's/foo/bar/' {} \;
快速更换:
# Your suggestion here
(这个相当快,但是是两次通过并且不处理空格。)
perl -p -i -e 's/foo/bar/g' `grep -lr --include=*.txt foo`
我正在创建一个指向folder1/folder2
in的符号链接home-folder
。但我不小心做了:
ln -s folder1/folder2
而 infolder2
而不是 in home-folder
。所以我最终不小心创建了一种递归链接。
现在我无法删除此链接:
rm folder1/folder2
给出错误信息'folder1/folder2' Is a directory
。
我害怕去,rmdir
或者rm -rf
因为我不确定将尝试删除什么,链接或folder2
. 这尤其是一个问题,因为folder1/folder2
它是一个共享文件夹,我不想为服务器上的其他用户搞砸这个。
这个答案表明,可以将所有文件(包括隐藏文件)从目录复制src
到目录中dest
,如下所示:
mkdir dest
cp -r src/. dest
答案或其评论中没有解释为什么这实际上有效,而且似乎也没有人找到这方面的文档。
我尝试了一些东西。一、正常情况:
$ mkdir src src/src_dir dest && touch src/src_file src/.dotfile dest/dest_file
$ cp -r src dest
$ ls -A dest
dest_file src
然后,/.
最后:
$ mkdir src src/src_dir dest && touch src/src_file src/.dotfile dest/dest_file
$ cp -r src/. dest
$ ls -A dest
dest_file .dotfile src_dir src_file
因此,它的行为类似于*
,但也会复制隐藏文件。
$ mkdir src src/src_dir dest && touch src/src_file src/.dotfile dest/dest_file
$ cp -r src/* dest
$ ls -A dest
dest_file src_dir src_file
.
并且是此处解释..
的正确硬链接,就像目录条目本身一样。
这种行为是从哪里来的,它记录在哪里?