GNU/Linux >> Linux の 問題 >  >> Linux

cp および mv での Linux ワイルドカードの使用

find コマンドは、ワイルドカード (またはより複雑な) ファイル名の一致に対して操作を実行する単純なケースで非常に簡潔に使用できます。以下のテクニックはメモリにコミットできます...ほとんど!

これは find を許可することで機能します コマンドは、見つけたファイル名ごとに別のコマンドを実行します。 echo を使用して、この例をドライランできます。 mv の代わりに/前に .

'report' で始まる名前の現在のディレクトリ内のすべてのファイルを、'reports' という名前の別の並列ディレクトリに移動したい場合:

find . -name "report*.*" -exec mv '{}' ../reports/ \;

ワイルドカード文字列は引用符で囲む必要があり、「見つかった」ファイル名を示す {} は引用符で囲む必要があり、最後のセミコロンはエスケープする必要があります。これはすべて、これらの文字の Bash/shell 処理によるものです。

find の man ページを見てください。 その他の用途:https://linux.die.net/man/1/find


ワイルドカードがどのように機能するかについて少し話しましょう。

cp *.txt foo

実際には cp を呼び出しません 引数 *.txt 付き 、そのグロブに一致するファイルが存在する場合。代わりに、次のように実行します:

cp a.txt b.txt c.txt foo

同様に、

mv *.txt *.old

...何をすればよいか分からない可能性があります。なぜなら、呼び出されたときに次の情報が表示されるからです:

mv a.txt b.txt c.txt *.old

または、さらに悪いことに、すでに 持っている z.old という名前のファイル 、表示されます:

mv a.txt b.txt c.txt z.old

したがって、さまざまなツールを使用する必要があります。考慮事項:

# REPLACES: mv /data/*/Sample_*/logs/*_Data_time.err /data/*/Sample_*/logs/*_Data_time_orig.err
for f in /data/*/Sample_*/logs/*_Data_time.err; do
  mv "$f" "${f%_Data_time.err}_Data_time_orig.err"
done

# REPLACES: cp /data/*/Sample_*/scripts/*.sh /data/*/Sample_*/scripts/*_orig.sh
for f in /data/*/Sample_*/scripts/*.sh; do
  cp "$f" "${f%.sh}_orig.sh"
done

# REPLACES: sh /data/*/Sample_*/scripts/*_orig.sh
for f in /data/*/Sample_*/scripts/*_orig.sh; do
  if [[ -e "$f" ]]; then
    # honor the script's shebang and let it choose an interpreter to use
    "$f"
  else
    # script is not executable, assume POSIX sh (not bash, ksh, etc)
    sh "$f"
  fi
done

これは、パラメーター拡張を使用して、新しい名前を追加する前に古い名前の末尾を取り除きます。


Linux
  1. Linuxのメモリ使用量

  2. Anacron とは何ですか? Linux での Anacron の使用法

  3. Ubuntu Linux:プロセス スワップ メモリとメモリ使用量

  1. Linux Catコマンド:使用法と例

  2. Linux Sedコマンド:使用法と例

  3. Linuxでファイルを圧縮および解凍する方法

  1. Linuxでファイルとディレクトリを圧縮する方法(例付き)

  2. Linux AWKコマンド–LinuxおよびUnixの使用構文の例

  3. 4LinuxでのCutコマンドの基本的かつ実用的な使用法