最新記事

ファイルを読み取るためにhexdumpを使用すると、findのスパース値(%S)が変更されるのはなぜですか?
find
sparse-files
lustre

ファイルを読み取るためにhexdumpを使用すると、findのスパース値(%S)が変更されるのはなぜですか?

私はLustreファイルシステムを使用しています。%Sファイルのfind()の希少値を見た後、を使用してそのファイルを印刷してからfindの希少hexdump値を見直すと、時々find(%S)の希少値が変わることがわかりました。なぜ変わったのですか? %Sまれな値を探す()コマンドを使用してファイルを表示するmyvideo.mp4: find myvideo.mp4 -printf "%S" myvideo.mp4ファイルを読み取るには、次のコマンドを使用しますhexdump。 hexdump myvideo.mp4 複数のファイルでこの動作が見つかりました。検索( )の希少値の変更例%S: 0.000135559到着0.631297 0.00466808到着0.228736 readを使用するとファイルが部分的にローカルにキャッシュされるためですかhexdump?私はこの変更が特定的ではないことを知りました。たとえば、(そしておそらくファイルを読む他のプログラムでも)hexdump同じことが起こります:nano dernoncourt@server:/videos$ find myvideo.mp4 -printf "%S" 0.00302331 dernoncourt@server:/videos$ nano myvideo.mp4 dernoncourt@server:/videos$ find myvideo.mp4 -printf "%S" 0.486752

Admin

find -prune:-print0が検索結果に影響するのはなぜですか? [コピー]
find

find -prune:-print0が検索結果に影響するのはなぜですか? [コピー]

この質問にはすでに答えがあります。: 検索 - すべての結果を印刷または印刷しない (回答1個) 閉鎖2ヶ月前。 想像する: $ tree . . ├── x1.txt ├── x2.txt └── x3.txt 0 directories, 3 files $ find . -name "x1.txt" -prune -o -name "*.txt" ./x1.txt ./x2.txt ./x3.txt $ find . -name "x1.txt" -prune -o -name "*.txt" -print0 ./x2.txt./x3.txt -print0ここでは、これが検索結果に影響を与えることがわかります。混乱してください。 なぜ印刷されない-print0のですか?find ...x1.txt なぜ印刷さ-print0れないのですか?find ...x1.txt

Admin

Bash:正当なフォルダパスが認識されません。
bash
find

Bash:正当なフォルダパスが認識されません。

sedパスを次に変換するPATH入力を試してみましたfind。 User.Name@Machine-Name ~ $ echo $PATH | sed -e 's/:/\n/g' \ | sed -n -e 's=.*="&"=' -e '2,5p' "/bin" "/usr/local/bin" "/usr/bin" "/c/Program Files/Eclipse Adoptium/jdk-8.0.392.8-hotspot/bin" スペースを保護するためにパスが引用されます。残念ながら、次の住所に提出された場合find: User.Name@Machine-Name ~ $ find \ $(echo $PATH | sed -e 's/:/\n/g' | sed -n -e 's=.*="&"=' -e '2,5p') \ -iname '*libc*' find: ‘"/bin"’: No such file or directory find: ‘"/usr/local/bin"’: No such file or directory find: ‘"/usr/bin"’: No such file or directory find: ‘"/c/Program’: No such file or directory find: ‘Files/Eclipse’: No such file or directory find: ‘Adoptium/jdk-8.0.392.8-hotspot/bin"’: No such file or directory 実際、スペースは保護されておらず、パラメータ区切り文字として解釈されます。 一方、引用したパスだけを入力すると正常に動作します。 User.Name@Machine-Name ~ $ find "/bin" -iname '*libc*' # Finds nothing, but no syntax error User.Name@Machine-Name ~ これをどのように理解し、PATHパスをパラメータに効率的に変換できますかfind?

Admin

この変数をどのように適切に定義して検索コマンドに挿入しますか? [コピー]
bash
find
variable-substitution

この変数をどのように適切に定義して検索コマンドに挿入しますか? [コピー]

この質問にはすでに答えがあります。: Bashで外部コマンドの可変長引数行を作成する正しい方法 (回答2個) 閉鎖6ヶ月前。 私は私の音楽ファイルを管理するBashスクリプトを書いていましたがmscript.sh、そのいくつかはそのようなファイルのリストを生成しました。 all_exts=" -iname \"*.webm\" -o -iname \"*.mkv\" " #all_exts=' -iname "*.webm" -o -iname "*.mp3" -o -iname "*.mp4" -o -iname "*.mkv" ' #The line below works fine #find "${HOME}/pCloudDrive/SocialSciences/Arabic/al_aghani" -maxdepth 1 -type f -size +1M \( -iname "*.webm" -o -iname "*.mp3" -o -iname "*.mp4" -o -iname "*.mkv" \)|\ find "${HOME}/pCloudDrive/SocialSciences/Arabic/al_aghani" -maxdepth 1 -type f -size +1M \( "$all_exts" \)|\ awk -v FS="/" '{print $8}' > "${HOME}/pCloudDrive/SocialSciences/Arabic/al_aghani/list" #it does not work with single quotes either 次の出力が得られ、findコマンドをfind: paths must precede expression: -iname "*.webm" -o -iname "*.mkv" ' 挿入せずにスクリプトを実行すると、スクリプトは正しく機能します。all_exts正しくサイズを変更するにはどうすればよいですかall_exts? PS:このスクリプトは問題を分離するための簡単なものです。all_extsさまざまなディレクトリでこれを実行する検索コマンドが多いため、検索コマンドを挿入する必要があります。

Admin

修正時間で画像を並べ替えてフィルタリングし、FreeBSDのnsxivで表示する方法
shell-script
find
freebsd
sort
images

修正時間で画像を並べ替えてフィルタリングし、FreeBSDのnsxivで表示する方法

使っていますnsxivFreeBSDでJPEGとPNG画像を表示します。ただし、FreeBSDのnsxivで画像を表示するために、修正時間で画像を並べ替えてフィルタリングする方法はありません。 GNU coreutils および GNU findutils を使用する Linux では、次のコマンドを使用して、2023 年 10 月 1 日以降に変更されたイメージを変更時間ごとに並べ替えることができます。 find . -maxdepth 1 -type f \ \( -iregex '.+\.jpe?g$' -o -iregex '.+\.png$' \) \ -newermt 2023-10-01 \ -exec ls -t --zero -- {} + | \ nsxiv -0 - 空白、改行、およびその他の珍しい文字を含むファイル名を処理するのと同じコマンドはFreeBSDにありません。問題はFreeBSDにあります。lsFreeBSDのもう1つの問題は、--zeroNULで区切られたファイル名を出力するオプションがないことです。nsxivfind-printf0に渡すことができる項目はありませんsort -z。画像を修正時間で並べ替えてフィルタリングし、FreeBSDのnsxivで見る方法は? 私はLinuxとFreeBSDで/bin/sh(ダッシュ)を使用しています/bin/sh。

Admin

findを使用してディレクトリを参照するときにパスを実際に除外する方法
find
posix

findを使用してディレクトリを参照するときにパスを実際に除外する方法

次のようにすると: mkdir /tmp/test sudo mkdir /tmp/test/test2 sudo chmod 700 /tmp/test/test2 cd /tmp/test find ./ -not -path "*"私はtest2がパスではなくルールと一致することを確認したいと思います。これにより完全に排除されなければなりません。ただし、ルールに関係なくディレクトリを巡回しようとしたfind: ‘./test2’: Permission deniedことを意味します。find sudo でコマンドを実行すると、ディレクトリは表示されません。これは、除外ルールが機能しますが、初期ルート中の検索条件ではなく、初期検索の出力に適用されることを意味します。 時間のかかるネットワークファイルシステムのマウントなど、特定の問題のあるディレクトリを除きながらルートファイルシステムの巡回を実装しようとしているので、全体の実行時間を短縮するためにサブディレクトリを探索せずに直接見てみたいと思います。 この目標をどのように達成できますか?

Admin

入力ファイルを使用してファイルをコピーしてファイルの方向を読み込みます。
shell
grep
find
pipe
cp

入力ファイルを使用してファイルをコピーしてファイルの方向を読み込みます。

grep1TBのファイルを検索するために使用しています。ファイル名をgrepし、名前をテキストファイルに入れたいので、cpdirと一致するすべてのファイルが欲しいです/home/user/matches。すべてのファイルを2回grepingせずに両方の操作を実行したいと思います。 私の考えは、grepを使用してファイル名の出力をテキストファイルに入れることです。 grep -ril "xxx" . >> /home/user/matches/output-filename.txt これでoutput-filename.txtcpへの入力として機能し、cpが1行ずつ実行されるようにします。どうすればいいですか?え?それとも、すべてのファイルを2回検索しないようにする他のアイデアはありますか?

Admin

「find -exec」から「bash -c」サブシェルに複数の引数を渡すには?
bash
find
subshell

「find -exec」から「bash -c」サブシェルに複数の引数を渡すには?

サブシェルfind -execに複数の引数を渡す方法はありますか?bash -c このアクション呼び出しが行われると、"*dogs.mp4globパターンと一致するすべてのビデオを検索し(たとえば)、サブシェルで実行してファイルがffmpegすでに存在することを確認して警告します。 find . -iname "*.mp4" -exec bash -c 'if [[ -f "${1%.*}_540.mp4" ]]; then echo "Already exists: $1"; else ffmpeg -i "$1" -vf "scale=540:-1" "${1%.*}_540.mp4" ; fi ;' _ {} + 540サイズのハードコーディングを避けるために、後で$2サイズをパラメータとして渡し、コマンドが次のようになりました{}。_ {} 540 + find . -iname "*.mp4" -exec bash -c 'if [[ -f "${1%.*}_$2.mp4" ]]; then echo "Already exists: $1"; else ffmpeg -i "$1" -vf "scale=%2:-1" "${1%.*}_%2.mp4" ; fi ;' _ {} 540 + 上記の行でエラーが発生しましたfind: -exec: no terminating ";" or "+"。 :: 私が理解したように、これはファイル名のプレースホルダーである{}か、{} +コマンド{} \;の最後になければなりません。 この場合、bash -cfrom-exec句に追加のパラメータをどのように渡すことができますか?

Admin

Ansible -m シェルと検索コマンド
find
pipe
ansible

Ansible -m シェルと検索コマンド

この問題を解決する方法を知っている人はいますか? ansible -m shell -i test.txt -a "sudo find / -regex '.*\(tar\|zip\)$' -type f 2>/dev/null | while read i; do echo $i; done" 問題は「while」部分にあります。結果は表示されません。 Bashで直接実行すると、すべてが正常です。 findunzip(、および見つかったファイルに対してさまざまな操作を実行するため、この「while」部分が必要ですgrep。) ありがとう

Admin

検索 - xargs、各行に対して新しいシェルを開き、コマンドを実行し、ユーザーがシェルを終了するのを待ちます。
bash
find
xargs
gnu
read

検索 - xargs、各行に対して新しいシェルを開き、コマンドを実行し、ユーザーがシェルを終了するのを待ちます。

フォローアップ 仕事:*AlbumArt*inameファイルを含み、inameも含むすべてのフォルダを一覧表示し、*cover*.jpg各フォルダのサイズとともにすべてのjpgファイルを一覧表示します。 find . -type f -iname '*AlbumArt*' -print0 | sort -z \ | xargs -0 -I "{}" bash -c ' find "$(dirname "${1}")" -maxdepth 1 -iname "*cover*.jpg" -print0' _ "{}" \; \ | uniq -z | xargs -0 -I "{}" bash -c ' ls -la "$(dirname "${1}")"/*.jpg;' _ "{}" \; 私は何をしたいと思うか。 *cover*.jpginameとinameを含むすべてのフォルダを一覧表示し、*AlbumArt*そのフォルダ内の各画像ファイルのサイズを一覧表示し、ノーチラスを開き、それらのフォルダでこれらの画像を手動で確認できるようにしたいと思います(いくつかの追加ファイルを削除したいので)。一度に1つのフォルダを処理します。そのため、xargsのすべての出力に対してls -laノーチラスをオンにし、ノーチラスが閉じるのを待ちたいので、nautilus "${1}"; read -r -p "Press any key to continue" Continue;上に追加しました。 find . -type f -iname '*AlbumArt*' -print0 | sort -z \ | xargs -0 -I "{}" bash -c ' find "$(dirname "${1}")" -maxdepth 1 -iname "*cover*.jpg" -print0' _ "{}" \; \ | uniq -z | xargs -0 -I "{}" bash -c ' ls -la "$(dirname "${1}")"/*.jpg; nautilus "${1}"; read -r -p "Press any key to continue" Continue;' _ "{}" \; これは機能しますが、ユーザー入力のために停止しません。つまり、いくつかのread -r -p "Press any key to continue" Continue;ノーチラスウィンドウが開きます!しかし、一度に1つのノーチラスだけを開きたいので、xargsは各行の実行後に待機したいと思います。 xargsが各行を実行した後にユーザー入力を待機させるにはどうすればよいですか?

Admin