相关疑难解决方法(0)

没有隐藏文件夹的os.walk

我需要列出文件夹中包含目录路径的所有文件.我尝试使用os.walk,这显然是完美的解决方案.

但是,它还列出了隐藏的文件夹和文件.我希望我的应用程序不要列出任何隐藏的文件夹或文件.是否有任何标志可以用来使它不产生任何隐藏文件?

跨平台对我来说并不重要,只要它适用于linux(.*pattern)就可以了.

python linux os.walk

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

如何在find中使用-exec中的管道

有没有办法在find中的-exec中使用管道?我不希望grep通过整个文件,但只能通过每个文件的第一行.

find /path/to/dir -type f -print -exec grep yourstring {} \;
Run Code Online (Sandbox Code Playgroud)

我试图用"cat"和"head -1"把管道放在那里,但是效果不好.我尝试以某种方式使用括号,但我没有设法弄清楚如何将它们放在那里.我非常感谢你的帮助.我知道如何在不使用find的情况下以其他方式解决问题,但是我们尝试在学校使用find和pipeline来实现它,但是无法管理如何操作.

find /path/to/dir -type f -print -exec cat {} | head -1 | grep yourstring \;
Run Code Online (Sandbox Code Playgroud)

这是我们如何尝试这样做,但无法管理括号,甚至可能.我试图通过网络查看,但无法找到任何答案.

unix pipe exec find

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

iconv任何编码为UTF-8

我试图将iconv指向一个目录,所有文件都将转换为UTF-8,无论当前编码如何

我正在使用此脚本,但您必须指定要进行的编码.如何让它自动检测当前编码?

dir_iconv.sh

#!/bin/bash

ICONVBIN='/usr/bin/iconv' # path to iconv binary

if [ $# -lt 3 ]
then
    echo "$0 dir from_charset to_charset"
    exit
fi

for f in $1/*
do
    if test -f $f
    then
        echo -e "\nConverting $f"
        /bin/mv $f $f.old
        $ICONVBIN -f $2 -t $3 $f.old > $f
    else
        echo -e "\nSkipping $f - not a regular file";
    fi
done
Run Code Online (Sandbox Code Playgroud)

终点线

sudo convert/dir_iconv.sh convert/books CURRENT_ENCODING utf8
Run Code Online (Sandbox Code Playgroud)

linux ubuntu encoding utf-8 iconv

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

bash脚本,创建目录中所有文件的数组

我有一个myDir 很多.html文件的目录.我正在尝试创建目录中所有文件的数组,以便我可以索引数组并能够引用目录中的特定html文件.我试过以下一行:

myFileNames=$(ls ~/myDir)

for file in $myFileNames; 
#do something
Run Code Online (Sandbox Code Playgroud)

但我想能够有一个计数器变量,并具有如下逻辑:

 while $counter>=0;
   #do something to myFileNames[counter]
Run Code Online (Sandbox Code Playgroud)

我是shell脚本的新手,我无法弄清楚如何实现这一点,因此会对此事有任何帮助.

arrays bash shell while-loop

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

Bash循环目录包括隐藏文件

我正在寻找一种方法来在我的目录包含的所有内容上进行bash的简单循环,即文件,目录和包含隐藏的链接.

我更愿意,如果它可以特别在bash中,但它必须是最一般的.当然,文件名(和目录名)可以有空格,断行,符号.除了"/"和ASCII NULL(0×0)之外的所有内容,即使在第一个字符处也是如此.此外,结果应排除'.' 和'..'目录.

这是循环必须处理的文件生成器:

#!/bin/bash
mkdir -p test
cd test
touch A 1 ! "hello world" \$\"sym.dat .hidden " start with space" $'\n start with a newline' 
mkdir -p ". hidden with space" $'My Personal\nDirectory'
Run Code Online (Sandbox Code Playgroud)

所以我的循环应该看起来像(但必须处理上面棘手的东西):

for i in * ;
  echo ">$i<"
done
Run Code Online (Sandbox Code Playgroud)

我最接近的尝试是使用ls和bash数组,但它无法使用,是:

IFS=$(echo -en "\n\b")
l=( $(ls -A .) )
for i in ${l[@]} ; do
echo ">$i<"
done
unset IFS
Run Code Online (Sandbox Code Playgroud)

或者使用bash数组,但不排除".."目录:

IFS=$(echo -en "\n\b")
l=( [[:print:]]* .[[:print:]]* )
for i in ${l[@]} ; …
Run Code Online (Sandbox Code Playgroud)

linux bash

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

从find命令执行bash函数

我在bash中定义了一个函数,它检查是否存在两个文件,比较它们是否相等并删除其中一个.

function remodup {
    F=$1
    G=${F/.mod/}
    if [ -f "$F" ] && [ -f "$G" ]
    then
        cmp --silent "$F" "$G" && rm "$F" || echo "$G was modified"
    fi
}
Run Code Online (Sandbox Code Playgroud)

然后我想从find命令调用此函数:

find $DIR -name "*.mod" -type f -exec remodup {} \;
Run Code Online (Sandbox Code Playgroud)

我也试过| xargs语法.两者findxargs告诉他们``remodup`不存在.

我可以将函数移动到一个单独的bash脚本并调用脚本,但我不想将该函数复制到路径目录(还),所以我需要用绝对路径调用函数脚本或者总是调用来自同一位置的调用脚本.

(我可能可以fdupes用于这项特殊任务,但我想找到一种方法

  1. find命令调用函数;
  2. 从另一个脚本的相对路径调用一个脚本; 要么
  3. 对使用命令${F/.mod/}找到的文件使用语法(或其他bash变量操作)find.)

bash xargs

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

递归列出Bash中给定目录中的文件

我知道它可以使用ls -R path.但我正在尝试学习shell语言的语法和控制结构,所以我正在尝试编写自己的代码:

#!/bin/sh

arg=$1;

lsRec() {
    for x in $1*; do
        if [ -d "$x" ]; then
            lsRec $x;
        else
            echo "$x";
        fi
    done
}

lsRec $arg;
Run Code Online (Sandbox Code Playgroud)

当我调用命令时./ej2.sh ~/Documents/,终端抛出:segmentation fault (core dumped).为什么我收到此错误?我在代码中遗漏了什么?

谢谢.

linux bash shell

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

与grep进行第一场比赛

我有一个bash函数,它遍历某个单词的文件和greps列表并将其写入文件.问题是我得到了单词的每个实例,我只想得到第一个实例.我通过添加head -1grep 遇到了一个解决方案,但是现在,当我调用它时,我的函数就会挂起.

 83 function processAppLogs {
 84         for i in `find $log_des -name $fname`
 85             do
 86                 p=$i
 87                 d=${p//applog.txt/unmountTimestampList.txt}
 88                 grep "UNMOUNTED"  $i >> $d
 89                 grep "PATIENT ID" | head -1 | $i >> $d
 90             done
 91 }
Run Code Online (Sandbox Code Playgroud)

我只想grep第一个"PATIENT ID"实例,但我想我可能有错误的语法?这是grep第一个实例并将其写入文件的正确方法吗?

bash grep

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

是否有 r 软件包受到当前 log4j / CVE-2021-44228 安全问题的影响?

RStudio 已确认其不受当前 log4j / CVE-2021-44228安全问题的影响。然而,我还不清楚是否有任何 r 包具有 log4j 依赖项。我最感兴趣的是该tidyverse包和其他广泛使用的包,例如该xlsx包。

这里讨论如何检测安装的r包是否有Java依赖。

log4j r tidyverse

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

如何在Linux bash的'find'命令中修复路径包含空格

我必须在Linux中使用路径包含空格字符,下面的命令对于非空间路径可以正常工作,但如果路径包含空格则会失败.

#!/bin/bash
for i in $( find "." -maxdepth 1 -mindepth 1 -type d ); do
    b=$(echo "$i" | awk '{print substr($1,3); }' )
    echo "This file contain <Modified date> <ActualSize Byte>   <FullPath>" > "$i"/"$b".txt
    find "$i" -type f ! -iname '*thumbs.db*' -print0 | xargs -0 stat -c "%y %s %n" >> "$i"/"$b".txt
done
Run Code Online (Sandbox Code Playgroud)

这是我的文件夹列表.

.
./Folder 1
./Folder 2
./Folder 3
Run Code Online (Sandbox Code Playgroud)

脚本的错误如下.

./xyz.sh: line 4: ./Folder/Folder.txt: No such file or directory
find: ./Folder: No such file or directory
./xyz.sh: …
Run Code Online (Sandbox Code Playgroud)

unix linux bash

0
推荐指数
1
解决办法
772
查看次数

标签 统计

bash ×6

linux ×5

shell ×2

unix ×2

arrays ×1

encoding ×1

exec ×1

find ×1

grep ×1

iconv ×1

log4j ×1

os.walk ×1

pipe ×1

python ×1

r ×1

tidyverse ×1

ubuntu ×1

utf-8 ×1

while-loop ×1

xargs ×1