为什么在 cp 命令中使用 globbing 会出现 "omitting directory" 错误?
Why I get the "omitting directory" error using globbing in cp command?
我正在尝试将 "file.txt" 文件复制到所有目录中。
[root@mycomputer]# ls -lh
total 132K
drwxr--r--. 2 postgres postgres 4.0K Jan 2 08:47 ilo01
drwxr--r--. 2 postgres postgres 4.0K Jan 2 08:40 ilo02
drwxr--r--. 2 postgres postgres 4.0K Jan 2 08:40 ilo03
drwxr--r--. 2 postgres postgres 4.0K Jan 2 08:40 ilo04
drwxr--r--. 2 postgres postgres 4.0K Jan 2 08:40 ilo05
drwxr--r--. 2 postgres postgres 4.0K Jan 2 08:40 ilo06
drwxr--r--. 2 postgres postgres 4.0K Jan 2 08:40 ilo07
drwxr--r--. 2 postgres postgres 4.0K Jan 2 08:40 ilo08
drwxr--r--. 2 postgres postgres 4.0K Jan 2 10:03 ilo09
drwxr--r--. 11 postgres postgres 4.0K Jan 2 11:15 ilo10
-rw-r--r--. 1 postgres postgres 64K Jun 27 2016 file.txt
使用 TAB 查看 运行:
命令的行为
[root@mycomputer]# cp -p file.txt ilo[0-1][0-9]
ilo01/ ilo02/ ilo03/ ilo04/ ilo05/ ilo06/ ilo07/ ilo08/ ilo09/ ilo10/
但是我得到这个错误:
[root@mycomputer]# cp -v -p file.txt ilo[0-1][0-9]*
`postgresTdas.txt' -> `ilo10/file.txt'
cp: omitting directory `ilo01'
cp: omitting directory `ilo02'
cp: omitting directory `ilo03'
cp: omitting directory `ilo04'
cp: omitting directory `ilo05'
cp: omitting directory `ilo06'
cp: omitting directory `ilo07'
cp: omitting directory `ilo08'
cp: omitting directory `ilo09'
同样的事情发生在:
[root@mycomputer]# cp -p file.txt ilo*
和
[root@mycomputer]# cp -p file.txt ilo*/
我不明白为什么“[0-1][0-9] 没有按我需要的方式工作。
我假设副本将 file.txt 放入 TAB 显示的列表中。
我错过了什么?
参数扩展为文件+所有目录
cp
将最后一个参数视为目标,因此其他目录被视为源。
并且因为 cp
不会复制目录,除非设置 -r
或 -R
选项(复制目录 和 内容),您在除最后一个目录之外的所有目录上获取警告。
我会用 bash/sh 脚本代替:
for d in ilo[0-1][0-9]
do
cp -p file.txt $d
done
cp
命令的大多数实现不能 能够复制到多个目标。你对此无能为力。您需要解决多次调用 cp
的限制。最简单的可能是这样的:
ls -d dir* | xargs -n 1 cp file.txt
我正在尝试将 "file.txt" 文件复制到所有目录中。
[root@mycomputer]# ls -lh
total 132K
drwxr--r--. 2 postgres postgres 4.0K Jan 2 08:47 ilo01
drwxr--r--. 2 postgres postgres 4.0K Jan 2 08:40 ilo02
drwxr--r--. 2 postgres postgres 4.0K Jan 2 08:40 ilo03
drwxr--r--. 2 postgres postgres 4.0K Jan 2 08:40 ilo04
drwxr--r--. 2 postgres postgres 4.0K Jan 2 08:40 ilo05
drwxr--r--. 2 postgres postgres 4.0K Jan 2 08:40 ilo06
drwxr--r--. 2 postgres postgres 4.0K Jan 2 08:40 ilo07
drwxr--r--. 2 postgres postgres 4.0K Jan 2 08:40 ilo08
drwxr--r--. 2 postgres postgres 4.0K Jan 2 10:03 ilo09
drwxr--r--. 11 postgres postgres 4.0K Jan 2 11:15 ilo10
-rw-r--r--. 1 postgres postgres 64K Jun 27 2016 file.txt
使用 TAB 查看 运行:
命令的行为[root@mycomputer]# cp -p file.txt ilo[0-1][0-9]
ilo01/ ilo02/ ilo03/ ilo04/ ilo05/ ilo06/ ilo07/ ilo08/ ilo09/ ilo10/
但是我得到这个错误:
[root@mycomputer]# cp -v -p file.txt ilo[0-1][0-9]*
`postgresTdas.txt' -> `ilo10/file.txt'
cp: omitting directory `ilo01'
cp: omitting directory `ilo02'
cp: omitting directory `ilo03'
cp: omitting directory `ilo04'
cp: omitting directory `ilo05'
cp: omitting directory `ilo06'
cp: omitting directory `ilo07'
cp: omitting directory `ilo08'
cp: omitting directory `ilo09'
同样的事情发生在:
[root@mycomputer]# cp -p file.txt ilo*
和
[root@mycomputer]# cp -p file.txt ilo*/
我不明白为什么“[0-1][0-9] 没有按我需要的方式工作。
我假设副本将 file.txt 放入 TAB 显示的列表中。
我错过了什么?
参数扩展为文件+所有目录
cp
将最后一个参数视为目标,因此其他目录被视为源。
并且因为 cp
不会复制目录,除非设置 -r
或 -R
选项(复制目录 和 内容),您在除最后一个目录之外的所有目录上获取警告。
我会用 bash/sh 脚本代替:
for d in ilo[0-1][0-9]
do
cp -p file.txt $d
done
cp
命令的大多数实现不能 能够复制到多个目标。你对此无能为力。您需要解决多次调用 cp
的限制。最简单的可能是这样的:
ls -d dir* | xargs -n 1 cp file.txt