小编Tul*_*ova的帖子

如何使用带有管道命令/程序链的 watch 命令

我通常使用watchLinux 实用程序每隔n几秒重复观察一个命令的输出,例如在watch df -h /some_volume/.

但是我似乎无法使用watch管道命令系列,例如:

$ watch ls -ltr|tail -n 1
Run Code Online (Sandbox Code Playgroud)

如果我这样做,watch真的ls -ltr是在观察并且输出被传递给tail -n 1不输出任何东西。

如果我试试这个:

$ watch (ls -ltr|tail -n 1)
Run Code Online (Sandbox Code Playgroud)

我得到

$ watch: syntax error near unexpected token `ls'
Run Code Online (Sandbox Code Playgroud)

并且以下任何一种原因都失败了:

$ watch <(ls -ltr|tail -n 1)

$ watch < <(ls -ltr|tail -n 1)

$ watch $(ls -ltr|tail -n 1)

$ watch `ls -ltr|tail -n 1)`
Run Code Online (Sandbox Code Playgroud)

最后,如果这样做:

$ watch echo $(ls -ltr|tail -n 1) …
Run Code Online (Sandbox Code Playgroud)

bash pipe watch

113
推荐指数
3
解决办法
5万
查看次数

为什么“ls -all”显示某些文件的时间而其他文件只显示年份?

如果你发出ls -all命令,有些文件或目录有年份,有些有时间?为什么有的显示年份而有的显示时间?时间代表创建文件的时间吗?

在此处输入图片说明

ls

40
推荐指数
3
解决办法
4万
查看次数

cp 带有一个包含通配符的参数

如果我有以下 2 个文件和 1 个文件夹:

someuser@computer:~/Desktop/test$ ls -l
total 340
-rw-r--r-- 1 someuser someuser  45082 ago  5 09:56 file1.pdf
-rw-r--r-- 1 someuser someuser 291836 ago  5 09:56 file2.pdf
drwxrwxr-x 2 someuser someuser   4096 ago  5 09:56 this_is_a_folder.pdf
Run Code Online (Sandbox Code Playgroud)

然后我运行以下命令(注意我省略了目的地):

cp *.pdf
Run Code Online (Sandbox Code Playgroud)

file1.pdffile2.pdf复制到this_is_a_folder.pdf文件夹中。

someuser@computer00:~/Desktop/test$ ls this_is_a_folder.pdf/
file1.pdf  file2.pdf
Run Code Online (Sandbox Code Playgroud)

显然*.pdf是扩展到匹配项,所以它等价于

cp file1.pdf file2.pdf this_is_a_folder.pdf
Run Code Online (Sandbox Code Playgroud)

...和this_is_a_folder.pdf文件夹一样,然后将两个文件复制到其中。

这是一个错误吗?

这显然是通配符扩展的副作用,这不是我所期望的。

我会预料到一个missing destination file 错误

shell cp wildcards arguments

19
推荐指数
4
解决办法
6万
查看次数

更好的粘贴命令

我有以下两个文件(我用点填充行,因此文件中的每一行都具有相同的宽度,并使 file1 全部大写以使其更清晰)。

contents of file1:

ETIAM......
SED........
MAECENAS...
DONEC......
SUSPENDISSE

contents of file2

Lorem....
Proin....
Nunc.....
Quisque..
Aenean...
Nam......
Vivamus..
Curabitur
Nullam...
Run Code Online (Sandbox Code Playgroud)

请注意,file2 比 file1 长。

当我运行此命令时:

paste file1 file2
Run Code Online (Sandbox Code Playgroud)

我得到这个输出

ETIAM...... Lorem....
SED........ Proin....
MAECENAS... Nunc.....
DONEC...... Quisque..
SUSPENDISSE Aenean...
    Nam......
    Vivamus..
    Curabitur
    Nullam...
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能使输出如下?

ETIAM...... Lorem....
SED........ Proin....
MAECENAS... Nunc.....
DONEC...... Quisque..
SUSPENDISSE Aenean...
            Nam......
            Vivamus..
            Curabitur
            Nullam...
Run Code Online (Sandbox Code Playgroud)

我试过

paste file1 file2 | column -t
Run Code Online (Sandbox Code Playgroud)

但它这样做:

ETIAM......  Lorem....
SED........  Proin....
MAECENAS...  Nunc.....
DONEC......  Quisque..
SUSPENDISSE  Aenean...
Nam...... …
Run Code Online (Sandbox Code Playgroud)

text-processing columns paste

15
推荐指数
1
解决办法
1万
查看次数

我的 crontab 只喜欢五个星号(时区相关?)

我有一个用户的 crontab 的问题。

Crontab 拒绝运行任何作业,除非它计划每分钟运行一次 (* * * * *)。

一旦您将任务编辑为在每小时的第 15 分钟运行,它就无法运行。

这每分钟运行正常:

* * * * * touch /tmp/test01 
Run Code Online (Sandbox Code Playgroud)

这无法在每小时的第 15 分钟运行。它只是不会运行。

15 * * * * touch /tmp/test02
Run Code Online (Sandbox Code Playgroud)
  • 这是什么原因造成的?
  • 如何解决?

操作系统是 RedHat 4。

我总是编辑 croncrontab -eEDITOR设置为 vi。我在15 * * * *(分钟可以改变)之间来回改变* * * * *,结果是一样的。它只喜欢五个星号。

大编辑:

我按照@shane-h的问题进行了测试*/2 * * * *(每隔一分钟),结果奏效了!然后我发现了一些启示:

我用这个字符串做了一个测试 37 * * * * touch /tmp/prueba_777777

令我惊讶的是,这件事实际上运行了,但看看文件的日期:

-rw-r--r-- 1 orashut dba 0 …

cron timezone

6
推荐指数
1
解决办法
951
查看次数

使用 bash 将基于列的文本文件格式化为树结构

是否有一个 Unix/Linux 命令可以改变这个:

AMERICA USA NEW_YORK    AB-100
AMERICA USA NEW_YORK    VF-200
AMERICA USA NEW_YORK    XY-243
AMERICA USA LOS_ANGELES UH-198
AMERICA CANADA  TORONTO UT-876
AMERICA CANADA  TORONTO UT-877
AMERICA CANADA  VANCOUVER   UT-871
AMERICA CANADA  VANCOUVER   UT-872
AMERICA CANADA  VANCOUVER   UT-873
AMERICA MEXICO  MEXICO  OU-098
AMERICA MEXICO  MONTERREY   OU-099
AMERICA MEXICO  MONTERREY   OU-100
EUROPE  FRANCE  PARIS   IV-122
EUROPE  FRANCE  PARIS   AV-112
EUROPE  FRANCE  PARIS   IF-111
EUROPE  FRANCE  PARIS   XX-190
EUROPE  FRANCE  TOULOUSE    TL-654
Run Code Online (Sandbox Code Playgroud)

进入这个:

AMERICA
    USA
        NEW_YORK
            AB-100
            VF-200
            XY-243
        LOS_ANGELES
            UH-198 …
Run Code Online (Sandbox Code Playgroud)

bash shell-script text-processing text-formatting

5
推荐指数
3
解决办法
1756
查看次数

保存到文件的差异补丁输出。如何查看它的语法颜色?

我有一个包含文本文件的子文件夹的文件夹。

我时不时地运行一个脚本来制作该文件夹树的副本,然后创建一个包含新信息的新文件夹。

之后,有了旧版本和新版本,我运行 diff 以了解旧版本和新版本之间发生了什么变化,将输出发送到文件:

diff myFiler.old myFolder > diff_report.txt
Run Code Online (Sandbox Code Playgroud)

问题是。

- 如何查看 diff_report.txt 语法的颜色?

我并不是要像 git 使用 diff 时那样查看实际输出的颜色,而是使用这种语法着色来查看已保存到文件中的 diff 输出。

colors diff syntax-highlighting

5
推荐指数
1
解决办法
3449
查看次数

为什么 ls -l 不显示每个文件的时间和/或年份?

令我烦恼的是,有时当我在文件夹上运行 ls -l 时,它会报告某些文件的数据和时间,而其他文件只报告日期和年份。

$ ls -ltr
-rw-r--r-- 1 oracle9 dba  173 Dec 22 09:49 a1.par
-rw-r--r-- 1 oracle9 dba  191 Dec 22 09:49 a2.par
-rw-r--r-- 1 oracle9 dba  185 Dec 22 09:49 a3.par
-rw-r--r-- 1 oracle9 dba  497 Dec 22 09:49 a4.par
-rw-r--r-- 1 oracle9 dba  238 Dec 22 09:49 a5.par
-rw-r--r-- 1 oracle9 dba  260 Dec 22 09:49 a6.par
-rwxr-x--- 1 oracle9 dba 1076 Dec 22 09:49 al.sh
-rwxr-x--- 1 oracle9 dba  931 Dec 22 09:49 im.sh
-rwxr-x--- …
Run Code Online (Sandbox Code Playgroud)

ls rhel date

5
推荐指数
1
解决办法
4624
查看次数