Tag: bash

Linuxfind正则expression式

使用find命令的正则expression式遇到问题。 可能是我不明白在命令行上转义的东西。 为什么这些不一样? find -regex '.*[1234567890]' find -regex '.*[[:digit:]]' Bash,Ubuntu

Bash:recursion地复制命名文件,保留文件夹结构

我希望: cp -R src/prog.js images/icon.jpg /tmp/package 会在目标目录中产生一个对称的结构: /tmp | +– package | +– src | | | +– prog.js | +– images | +– icon.jpg 而是将这两个文件复制到/ tmp / package中。 一个平面的副本。 (这是在OSX上)。 是否有一个简单的bash函数可用于将所有文件(包括由通配符指定的文件(例如src / *。js))复制到目标目录中的合适位置。 有点像“对于每个文件,运行mkdir -p $(dirname "$file"); cp "$file" $(dirname "$file") ”,但可能是单个命令。 这是一个相关的线程,这表明这是不可能的。 笔者的解决scheme对我来说并不是那么有用,因为我想简单地提供一个文件列表,通配符或不是,并且把它们全部复制到目标目录。 IIRC MS-DOS的xcopy这样做,但似乎没有等效的cp。

检查传递的参数是否是BASH中的文件或目录

我试图在Ubuntu中编写一个非常简单的脚本,它允许我传递一个文件名或一个目录,并且能够在某个文件时做某些特定的事情,而当它是一个目录时则可以做某些事情。 我遇到的问题是当目录名称,或者可能是文件,名称中有空格或其他易变的字符。 下面是我的基本代码,以及几个testing。 #!/bin/bash PASSED=$1 if [ -d "${PASSED}" ] ; then echo "$PASSED is a directory"; else if [ -f "${PASSED}" ]; then echo "${PASSED} is a file"; else echo "${PASSED} is not valid"; exit 1 fi fi 这里是输出: andy@server~ $ ./scripts/testmove.sh /home/andy/ /home/andy/ is a directory andy@server~ $ ./scripts/testmove.sh /home/andy/blah.txt /home/andy/blah.txt is a […]

捕获find的输出。 -print0到一个bash数组中

使用find . -print0 find . -print0似乎是获得bash文件列表的唯一安全方式,因为文件名可能包含空格,换行符,引号等。 但是,我很难在bash或其他命令行工具中使find的输出有用。 我设法使用输出的唯一方法是通过pipe道到Perl,并将Perl的IFS更改为空: find . -print0 | perl -e '$/="\0"; @files=<>; print $#files;' 这个例子打印find的文件数量,避免文件名中换行符破坏计数的危险,就像下面这样: find . | wc -l 由于大多数命令行程序不支持空分界的input,我认为最好的办法是捕获find . -print0的输出find . -print0 find . -print0在bash数组中,就像我在上面的perl代码片段中所做的那样,然后继续执行任务,不pipe它是什么。 我怎样才能做到这一点? 这不起作用: find . -print0 | ( IFS=$'\0' ; array=( $( cat ) ) ; echo ${#array[@]} ) 一个更普遍的问题可能是: 我如何用bash中的文件列表来做有用的事情?

分号在shell脚本的行尾是多余的?

我有一个shell脚本,其中包含以下内容: case $1 in 0 ) echo $1 = 0; OUTPUT=3;; 1 ) echo $1 = 1; OUTPUT=4;; 2 ) echo $1 = 2; OUTPUT=4;; esac HID=$2; BUNCH=16; LR=.008; 在上面的代码片段中, 分号完全是多余的吗? 有人使用双分号有什么理由吗? 它似乎分号只是一个分隔符,你会使用,而不是一个新的行。

为什么sed不能replace所有的事件?

如果我在bash中运行这个代码: echo dog dog dos | sed -r 's:dog:log:' 它给出了输出: log dog dos 我怎样才能让它取代所有出现的狗?

Bash函数来查找最新的文件匹配模式

在Bash中,我想创build一个函数,返回匹配特定模式的最新文件的文件名。 例如,我有一个像这样的文件的目录: Directory/ a1.1_5_1 a1.2_1_4 b2.1_0 b2.2_3_4 b2.3_2_0 我想要以“b2”开头的最新文件。 我如何在bash中做到这一点? 我需要在我的~/.bash_profile脚本中有这个。

如何find一个文件“MIMEtypes(Content-Type?)”?

有没有办法find一个Linux bash脚本中的文件的MIMEtypes(或称为“内容types”…)? 我需要它的原因是因为imageshack似乎需要它上传一个文件,因为它检测到.png文件为“application / octet-stream”… 我检查过这个文件,它确实是一个.png $ cat /1.png ?PNG (with a heap load of random characters) 这给了我错误: $ curl -F "fileupload=@/1.png" http://www.imageshack.us/upload_api.php <links> <error id="wrong_file_type">Wrong file type detected for file 1.png:application/octet-stream</error> </links> 这工作,但我需要指定一个MIMEtypes。 $ curl -F "fileupload=@/1.png;type=image/png" http://www.imageshack.us/upload_api.php

如何获取shell脚本中目录中的文件列表?

我正在尝试使用shell脚本来获取目录的内容。 我的脚本是: for entry in `ls $search_dir`; do echo $entry done 其中$search_dir是一个相对path。 但是, $search_dir包含许多名称中带有空格的文件。 在这种情况下,此脚本不能按预期方式运行。 我知道我可以使用for entry in * ,但只适用于我目前的目录。 我知道我可以更改到该目录, for entry in *然后改回来,但是我的特殊情况阻止我这样做。 我有两个相对path$search_dir和$work_dir ,我必须同时工作,阅读他们创build/删除文件等等。 那么我现在该做什么? PS:我用bash。

用Bash批量重命名文件

Bash如何重命名一系列软件包以删除其版本号? 我一直在用expr和%% ,无济于事。 例子: Xft2-2.1.13.pkg变成Xft2.pkg jasper-1.900.1.pkg成为jasper.pkg xorg-libXrandr-1.2.3.pkg成为xorg-libXrandr.pkg