标签: bash

无法创建 *.gz 档案

尝试创建 .gz 存档 - my_gz.gz - 并向其中添加多个文件:

  $ gzip my_gz.gz file1.txt file12.txt

  gzip: can't stat: my_gz.gz: No such file or directory
Run Code Online (Sandbox Code Playgroud)

freebsd bash command-line archiving

2
推荐指数
1
解决办法
316
查看次数

使用 xargs 将参数传递给带管道的子外壳

我想重命名一些文件。我想我可以使用 xargs 来做到这一点。

find ./ -name "upload.log-*" 
./upload.log-20180622.gz-20180624.gz-20180626.gz
./upload.log-20180624.gz-20180626.gz
./upload.log-20180620.gz-20180622.gz-20180624.gz-20180626.gz
./upload.log-20180621.gz-20180623.gz-20180625.gz-20180627.gz

find ./ -name "upload.log-*" -print | cut -d"-" -f-2
./upload.log-20180622.gz
./upload.log-20180624.gz
./upload.log-20180620.gz
./upload.log-20180621.gz
Run Code Online (Sandbox Code Playgroud)

我正在尝试以下操作,但似乎不起作用

find ./ -name "upload.log-*" | xargs -I '{}' sh -c "echo $1 $(echo $1 | cut -d"-" -f-2)" "{}"
Run Code Online (Sandbox Code Playgroud)

bash sh xargs pipe command-line-arguments

2
推荐指数
1
解决办法
4823
查看次数

如何排除树中的多个文件扩展名?

使用 tree 命令时,我想从输出中排除列表*.png*.svg。问题是我尝试的每个括号扩展都不起作用。是因为树处理命令行参数的方式吗?

tree -I *.{svg,png}
tree -I '*.{svg,png}'
tree -I '{*.svg,*.png}'
tree -I '{*.svg,*.png}'
tree -I '*.{p,s}(v,n}g'
tree -I '*.{svg|png}'
Run Code Online (Sandbox Code Playgroud)

眼镜:

  • GNU bash,版本 4.4.23
  • 树 v1.7.0

linux terminal bash tree

2
推荐指数
1
解决办法
2245
查看次数

将第一个文件中的每一行与第二个文件中的所有行进行比较?

我有得到由2个不同版本的同一工具生成的项目2所TCL表示,让我们给他们打电话v1.tclv2.tcl

除了行的顺序之外,这些日志对于所有意图和目的在逻辑上通常是相同的。当我的项目的版本 1 和 2 相同时,每行都v1.tcl将在某处恰好出现一次v2.tcl

我希望能够确定是否有人做出了v2.tcl需要向后移植的更改v1.tcl(或反之亦然)……换句话说,我只想看到不匹配的行。例如:

  1. v1.tcl

    foo1
    bar1
    hello1
    world1
    
    Run Code Online (Sandbox Code Playgroud)
  2. v2.tcl

    hello1
    bar1
    foo2
    world1
    goodbye2
    
    Run Code Online (Sandbox Code Playgroud)
  3. “差异”返回值:

    file1:1 foo1
    file2:3 foo2
    file2:5 goodbye2
    
    Run Code Online (Sandbox Code Playgroud)

我应该写我自己的小脚本吗?有没有工具可以做到这一点?

script bash diff vim command-line

2
推荐指数
1
解决办法
684
查看次数

通过将重复文件与 MD5 进行比较来删除重复文件

我想根据它们的 MD5 值删除重复的文件。我已经在下面找到了脚本,但是如何修改它以使其递归运行?

因此,例如我有包含 3 个子文件夹 A B C 的文件夹

我希望 ./ ./A/ ./B/ ./C/ 中的所有文件检查它们的 md5 并相互比较,如果发现正匹配,则随机删除任一匹配。最终不再存在重复项。我不在乎哪个匹配首先被删除。

我希望我清楚地表达了我需要实现的目标,如果没有,请告诉我:)

#!/bin/bash
while true
do
  echo "Enter the directory:"
  read directory
  if [ -d $directory ]; then
    break
  else
    echo "Invalid directory"
  fi
done

for FILE in `ls $directory`
do
  if [ ! -f $FILE ]; then
    break;
  fi
  h=`md5sum $directory/$FILE | awk '{ print $1 }'`
  for f in `ls $directory`
  do
    if [ -f $f ] && [ $FILE != …
Run Code Online (Sandbox Code Playgroud)

script bash bash-scripting

2
推荐指数
1
解决办法
3329
查看次数

查找带有大写扩展名的文件名

如何在目录中递归地找到所有带有大写扩展名的文件。

我试过了 :

$ find -name "*.[A-Z][A-Z][A-Z]"
Run Code Online (Sandbox Code Playgroud)

似乎有效,但当然这不会检查最后一个点后超过 3 个字母的文件。

bash sh bash-scripting

2
推荐指数
1
解决办法
621
查看次数

弹出回其他目录并同时推送当前目录

很多时候我在两个目录之间工作。虽然很高兴能够

/working/dir/1 $     pushd /other/working/dir
/other/working/dir $ do something
/other/working/dir $ popd
/working/dir/1 $     do something else
/working/dir/1 $     pushd /other/working/dir
Run Code Online (Sandbox Code Playgroud)

如果 popd 调用压入/other/working/dir堆栈,那将是很好的,这样我就可以在两个目录之间来回调用 popd。

这样的事情可能吗?

bash

2
推荐指数
2
解决办法
327
查看次数

OSX 命令行查找具有不同扩展名的重复文件名

我已经解决了所有类似的问题 + 安装了一些命令行实用程序,例如 duff,但没有成功。

在我的图像目录中,我有同名但具有不同扩展名(jpg 和 png)的图像。我只想打印具有不同扩展名的重复文件名的文件名。(例如 foo.jpg & foo.png) 或至少一个文件名 (foo)

到目前为止,我尝试了这些方法

find . -exec bash -c 'basename "$0" ".${0##*.}"' {} \; | sort | uniq

find . -type f \( -name "*.jpg" -o -name "*.png" \)
Run Code Online (Sandbox Code Playgroud)

这些命令中的大多数都会向我返回Nothing OR All the files OR unique filename but not the Duplicate those

terminal bash command-line applescript macos

2
推荐指数
1
解决办法
1526
查看次数

使用 bash 将逗号分隔的列表导出到 html

我有一个 cxomma 分隔的 csv,我想将其转换为自定义 html,并且我遇到了另一个执行此操作的脚本,但是自从我使用https://www.tutorialspoint.com/execute_bash_online以来,这对我来说只是问题.php来运行它。

这是我找到的脚本:https : //unix.stackexchange.com/questions/105501/convert-csv-to-html-table

我的问题是我的输出需要有点不同,而关于 ECHO 的一些东西真的是在抗争。所以这是我的清单的一个例子:

Product,100 usd 现在使用这个脚本我想把它转换成这样:Product 100 usd

基本上将列表分成 2 个单元格。但是 echo 不断剥离 "'s 所以它只是一团糟。我不知道是不是因为 bash 模拟器换行,但我不断收到错误,似乎假设 >< 和 tr 以及 td 是一个命令.

目前我的脚本看起来像这样,它反映了我对 echo.. 的困扰:

while read INPUT ; do
echo ""<tr onmouseover="this.style.backgroundColor='#ffff66';"";
echo ""onmouseout="this.style.backgroundColor='#d4e3e5';>";
echo ""<td>${INPUT//,/</td><td><b>}</b></td></tr>";""
done
Run Code Online (Sandbox Code Playgroud)

这会产生:

$bash -f main.sh
main.sh: line 2: tr: No such file or directory
main.sh: line 4: ;
echo <td>six</td><td><b>nine</td><td><b>twelve</b></td></tr>: No such file or directory
main.sh: line 4: : …
Run Code Online (Sandbox Code Playgroud)

html bash shell css

2
推荐指数
1
解决办法
1099
查看次数

使用 Bash Windows 子系统错误的字符串连接

我很想知道为什么我的脚本在 Windows 子系统 linux 下不能按预期工作。

我的商店版本:(Debian GNU/Linux 9.6 (stretch)我也试过 ubuntu,结果相同)

我的 bash 版本: GNU bash, version 4.4.12(1)-release (x86_64-pc-linux-gnu)

这是我的基本脚本,仅用于显示问题:

PROJECT_ENV="development"
echo $PROJECT_ENV
compose_file="docker-compose.${PROJECT_ENV}.build.yml"
echo $compose_file
Run Code Online (Sandbox Code Playgroud)

它输出:

.build.ymlpose.development
Run Code Online (Sandbox Code Playgroud)

据我了解,该输出对我来说没有任何意义,我尝试重新安装 bash 但我仍然遇到同样的问题。

linux bash string concatenation windows-subsystem-for-linux

2
推荐指数
1
解决办法
677
查看次数